PHP 安全编程法则
标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去
完成这些内容。未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方
法可以避免发生安全问题。
SQL 注射
(*) 在组合 SQL 语句时要使用 SQL 变量绑定功能
(*) 如果数据库不提供变量绑定,那么需要对构成 SQL 的所有变量进行转义
不要将错误信息原封不动地显示在浏览器中。
为访问数据库的用户设置适当的权限。
操作系统命令行注射
(*) 避免使用能启动 shell 命令的语言
使用的语言如果允许启动 shell 命令,则需要对该功能的参数种的所有变量进行检查,确
保只包含合法的操作
不检查路径名参数/目录遍历
(*) 不要将外部传进来的参数直接作为文件名来使用
(*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径
为 Web 服务器上的文件设置正确的访问权限
检查文件名
会话管理的问题
(*) 用难以推测的内容作为会话 ID
(*) 不要在 URL 中保存会话 ID
(*) 为 https 协议中使用的 cookie 设置 secure 属性
(*) 登录成功后生成新的会话
(*) 登录成功后,在会话 ID 之外再生成一个秘密信息,每次访问页面时都检查之
不使用固定值作为会话 ID
将会话 ID 保存到 Cookie 中时,要设置有效期限
跨站脚本攻击(XSS)
不允许输入 HTML 内容时的解决方法