PHP网站安全性浅谈

PHP网站安全性浅谈

一、web应用服务安全性设置

1、服务器各应用服务尽可能以独立用户运行,如:
 WEB服务运行帐户为www
 MySQL服务运行帐户为mysql
 Memcached用户为memcache
 Redis运行帐户为redis

2、应用服务目录的读写权限最小颗粒化
(a)缓存目录:
一般需要755/777权限,但是多数情况下缓存目录无须提供给用户访问,可以通过nginx拒绝。如:

location ~ "^/cache" {
  return 403;
}

(b)附件目录:
一般也需要755/777等写入权限,建议附件和程序分离,附件不做PHP配置解析(这点能做到最好)。
如果上面做不到,那么建议你尽可能不去解析附件目录的PHP。如:

location ~* ^/upload/.*.(php|php5)($|/){
    deny all;
}

location ~* .*\.php($|/){
      if ($request_filename ~* (.*)\.php) {
            set $php_url $1;
      }
      if (!-e $php_url.php) {
            return 403;
      }

      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
}

PS:
(1)同时注意限制允许的上传格式。
(2)虽然说通过修改php.ini设置cgi.fix_pathinfo = 0;然后重启php-cgi也可以做到拒绝诸如/upload/2018.jpg/test.php类似的url地址访问,但是此修改会影响到使用PATH_INFO伪静态应用。

3、php安全性
(a).配置禁用部分函数

disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen

(b).禁用部分php.ini配置项

register_globals = Off
cgi.fix_pathinfo=0
magic_quotes_gpc = On
allow_url_include = Off
expose_php = Off


4、隐藏相关版本信息
一般而言,通过隐藏的手段提高安全性被认为是作用不大的做法。但某些情况下,尽可能的多增加一份安全性都是值得的。一些简单的方法可以帮助隐藏 PHP,这样做可以提高攻击者发现系统弱点的难度。

5、服务器尽可能减少开放端口

6、服务器防火墙iptables等配置

二、PHP安全性提升

1、程序漏洞问题
很多 PHP 程序所存在的重大弱点并不是 PHP 语言本身的问题,而是编程者的安全意识不高而导致的。因此,必须时时注意每一段代码可能存在的问题,去发现非正确数据提交时可能造成的影响。

2、用户输入信息的过滤
前端过滤&服务端过滤,永远不要信任外界输入的数据。如:尽可能过滤掉javascript(防止跨站攻击等)~

3、尽量不要显示错误[error_reporting(0);],或者使用合适的错误报告

4、如无特殊必要建议在php.ini中停用以下配置:

register_globals = Off //全局变量
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off


5、如果使用了一些开源的源码,建议多关注官方动态或乌云

三、MySQL安全性提升

1、永远不要使用超级用户连接数据库

2、拼接的sql多做过滤,永远不要相信外界输入的数据,特别是客户端(SQL注入)

3、建议使用PDO方式连接

4、如无必要尽可能关闭mysql的远程访问权限

欢迎补充。

本文最后更新于 2016-05-31 17:52:50 并被添加「php php安全 网站安全」标签,已有 3012 位童鞋阅读过。
本文作者:未来往事
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处

相关文章

此处评论已关闭