Linux下和Windows下如何设置PHP的安全

各位网络管理人员经常遇到的一个问题就是网站被别人挂马,随着php语言的流行,现在比较多的一种木马就是php木马,大家对此也非常的头疼。现在我给大家讲一下在linux和windwos下如何预防php木马。
一、先讲一下在linux下如何预防php木马。
1.首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:
php_admin_valueopen_basedir /usr/local/apache/htdocs
这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许,如果错误显示打开的话会提示这样的错误:
Warning:open_basedirrestrictionineffect.Fileisinwrongdirectoryin/usr/local/apache/htdocs/open.phponline4等等。
2、防止php木马执行webshell
打开safe_mode,在php.ini中设置disable_functions=passthru,exec,shell_exec,system二者选一即可,也可都选
3、防止php木马读写文件目录
在php.ini中的disable_functions=passthru,exec,shell_exec,system后面加上php处理文件的函数
主要有
fopen,mkdir,rmdir,chmod,unlink,dir
fopen,fread,fclose,fwrite,file_exists
closedir,is_dir,readdir.opendir
fileperms.copy,unlink,delfile
即成为 disable_functions=passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir,fopen,fread,fclose,fwrite,file_exists,closedir,is_dir,readdir.opendir,fileperms.copy,unlink,delfile

ok,大功告成,php木马拿我们没辙了,遗憾的是这样的话,利用文本数据库的那些东西就都不能用了。

  • LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本
    在5.3.3以上已经增加了HOST配置,可以起到防跨站、跨目录的问题。
    如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:

    [HOST=www.vpser.net]
    open_basedir=/home/wwwroot/www.vpser.net/:/tmp/
    [PATH=/home/wwwroot/www.vpser.net]
    open_basedir=/home/wwwroot/www.vpser.net/:/tmp/
    

    按上面的这个例子修改,换成你自己的域名和目录,多个网站就按上面的例子改成多个,最后重启php
    参考资料:http://www.vpser.net/security/lnmp-cross-site-corss-dir-security.html

二、windows下如何防止php木马
如果是在windos平台下搭建的apache,apache默认运行是system权限,这很恐怖,.那我们就给apache降降权限吧。
1.建立一个普通用户apache,只把它加入windows的iis默认组里面,其他任何权限都不给。
2.我们打开计算机管理器,选服务,点apache服务的属性,我们选择logon,选择thisaccount,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。

实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。

其它安全设置:

  1. 隐藏php的版本号
    在php.ini里使用expose_php选项来防止web服务器泄露php的报告信息。如下:
    expose_php=on
  2. 关闭注册全局变量
    在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
    register_globals = Off
  3. 打开magic_quotes_gpc来防止SQL注入
    QL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini中有一个设置:
    magic_quotes_gpc = Off这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ‘ 转为 \’等,这对防止sql注射有重大作用。所以我们推荐设置为:
    magic_quotes_gpc = On
  4. 错误信息控制
    一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:
    display_errors = Off
  5. 错误日志
    建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
    log_errors = On同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
    error_log = D:/usr/local/apache2/logs/php_error.log注意:给文件必须允许apache用户的和组具有写的权限。
  6. MYSQL的降权运行

参考资料:

  1. linux下和windows下如何防止php木马:http://gehailong.blog.51cto.com/765312/267175
  2. PHP安全模式safe_mode的说明:http://zhangliming73.blog.163.com/blog/static/90791924201231241420200/
  3. PHP几种常见的安全问题详解:http://zhxiaobu.blog.163.com/blog/static/149091957201023191122480/
  4. PHP漏洞大全:http://cys200302010101.blog.163.com/blog/static/41965023201022921317158/
发表评论?

4 条评论。

  1. 感觉小网站,没必要搞这么复杂。

  2. 三无屌丝路过,博客不错呵

  3. 龙年大吉,拜个年,虽然晚了点!

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据