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的远程访问权限
欢迎补充。
此处评论已关闭