1.文件系统安全
php如果具有root权限,且在脚本中许可用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件
上面的代码,假设用户提交的$userfile值是 ../etc/,那么/etc目录就会被删除

戒备文件系统攻击,策略如下:
只给php有限的权限
用户提交上来的变量要监测和过滤,不能包含文件路径等分外字符
只管即便避免利用PHP操作文件(删除),如果有这方面的需求,那用户可删除文件也必须是系统天生的随机名称,不可被用户掌握
2.数据库安全
数据库安全紧张戒备的是sql injection,即sql注入攻击,提升数据库安全的策略如下:
不用利用root帐号或者数据库所有者帐号连接数据库,连接数据库限定连接用户的ip
利用php的pdo扩展,有效防止sql注入,除了安全方面的上风,php的pdo扩展在性能方面有有很大上风
请参看 http://php.net/manual/en/pdo.prepared-statements.php
对一些敏感信息进行加密,常见的比如对密码进行加密
3.用户数据过滤
对用户数据过滤,可以戒备XSS和CSRF攻击
利用白名单(用户输入是固定模式)的办法
比如用户名只能利用数字字母,那么可以利用函数ctype_alnum判断
对用户输入利用函数 htmlentities或者htmlspecialchars进行处理,输入url不许可传入非http协议
用户身份验证利用令牌 token(csrf)
http://htmlpurifier.org/ HTML Purifier 是开源的戒备xss攻击的有效办理方案,
4.其他安全策略
线上环境关闭缺点报告(error_reporting,dislay_erros,可在php.ini中配置error_log路径,记录缺点信息,这样有助于创造可能的用户攻击)
Register Globals,弃用(移除)的特性,不要利用
魔术引号特性,不要开启,在PHP-5.4中已经被移除
只管即便利用PHP的最新版本,最新版本修复了已知的很多安全漏洞和bug
代码中严格遵守上述策略,基本能担保代码不会有太多的安全漏洞,能戒备常见攻击。
如果想要学习互换PHP的朋友,可以关注