PHP主机安全性能优化

Zhan, Anthony| 2013-04-26 PHP, 教程 评论数( 0 )

PHP是运行在服务器端的脚本语言,功能强大,广为流行,目前全球近80%的网站是基于PHP来开发的。本文将介绍一些技巧,以帮助站长提高PHP主机的安全性。

1. 保持更新

每个大型系统都有一个不断的改进过程,所以无论是PHP,服务器程序(Apache,Nginx…)及操作系统(Linux,Windows…)定期更新升级,是非常有必要的。

2. 文件系统安全

PHP被设计为以用户级别来访问和读写文件,因此非常有必要限制PHP的读写权限,确保一些不必要的文件被其误操作,尤其是系统文件,如/etc/passwd. 我们必须保证不能让PHP拿到root的权限,为其分配合适的用户和用户组。大多情况下我们会将其分配一个www-data的用户和用户组。

3. 数据库安全

数据库是现在网站必不可少的重要组成部分。一些敏感和机密数据会被保存在数据库中,例如网站用户的登录账户。我们从以下4个方面讨论数据库安全的问题:

1)设计数据库

永远不要用数据库的所有者或者超级用户(root)账号连接数据库,因为这些帐号可以执行任意的操作,如例如删除一个表,甚至清空整个数据库的内容。必要的话为网站应用程序分配多个用户,除了必须,不分配任何多余权限。

2)通信加密

通过ssl或ssh对客户端和数据库之间的通信数据进行加密,避免其被攻击者所监听。

3)存储加密

做好最环的打算是必须的。对一些敏感数据进行加密,如用户的密码,避免以明文的方式暴露给用户。一般我们可以通过php函数crypt()和md5()实现MD5,DES,Blowfish,SHA256,SHA512加密。

4)SQL注入

SQL可以被恶意的篡改,在执行SQL之前,必须对其合法性进行检测。

  • 输入数据的格式检查。如整数型(int)的数据,不能错误的使用字符串型(string)的数据
  • 使用转义函数(比如 mysql_escape_string() 和 sql_escape_string())把用户提交上来的非数字数据进行转义
  • 不要将错误报告暴露给用户
  • 使用存储过程隐藏操作内容

4. 错误报告

基本原则不要直接在页面上显示错误报告。

php.ini

display_errors = off

log_error = on
error_log = /var/log/php_error.log

5. Register Globals

"本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。"

关闭register_globals避免代码内部变量和客户端发送变量混杂在一起的情况

php.ini

register_globals = Off

6. 魔术引号(Magic Quote)

“本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。”

魔术引号是,所有的 '(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义,主要会影响到HTTP请求数据(GET,POST,COOKIE)。

可以通过以下方式将其关闭

php.ini

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

.htaccess

php_flag magic_quotes_gpc Off

聚焦云计算,扫描二维码,关注HostUCan云计算

有好的文章希望站长之间帮助分享推广,猛戳这里我要投稿

您需要登录后才可以评论登录|注冊

暂无评论