background image

PHP 安全编程法则

 

标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去

 

 

完成这些内容。未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方

法可以避免发生安全问题。

SQL 注射

(*) 在组合 SQL 语句时要使用 SQL 变量绑定功能

(*) 如果数据库不提供变量绑定,那么需要对构成 SQL 的所有变量进行转义

不要将错误信息原封不动地显示在浏览器中。

为访问数据库的用户设置适当的权限。

操作系统命令行注射

(*) 避免使用能启动 shell 命令的语言

使用的语言如果允许启动 shell 命令,则需要对该功能的参数种的所有变量进行检查,确

保只包含合法的操作

不检查路径名参数/目录遍历

(*) 不要将外部传进来的参数直接作为文件名来使用

(*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径

为 Web 服务器上的文件设置正确的访问权限

检查文件名

会话管理的问题

(*) 用难以推测的内容作为会话 ID

(*) 不要在 URL 中保存会话 ID

(*) 为 https 协议中使用的 cookie 设置 secure 属性

(*) 登录成功后生成新的会话

(*) 登录成功后,在会话 ID 之外再生成一个秘密信息,每次访问页面时都检查之

不使用固定值作为会话 ID

将会话 ID 保存到 Cookie 中时,要设置有效期限

跨站脚本攻击(XSS)

不允许输入 HTML 内容时的解决方法