【小结】Essential PHP Security - PHP安全基础 (学习小结)

Essential PHP Security - PHP安全基础  译文地址:http://bbs.phpchina.com/viewthread.php?tid=3192

1. 深度防范原则的必要性,坚持过滤输入,即使是数据库里的数据;
2. 降低敏感数据的暴露频率;
3. 如果开启了register_globals,任何使用未初始化变量的行为就意味着安全漏洞;
4. 网站上线后,要关闭display_errors、打开log_errors,也可通过set_error_handler()定制自己的错误处理;
5. 建立保存过滤后的数据的数组$clean,以后的操作中用到的数据始终要从该数组中取;
6. 永远不要去试图纠正不安全的数据;
7. 将url地址嵌入到img的src特性中也会生效,必须过滤输出;
8. 为防止表单的伪造提交,可生成一个惟一的token值作为隐藏域,提交后使之与SESSION中的token相比较;
9. 网站结构设计时应该把用户不会直接访问的文件放在网站根目录外(尤其是配置文件);
10. 牛叉的王小云教授;
11. 最好是针对特定的数据库用特定的方式进行数据过滤,如MySQL用mysql_real_escape_string函数;
12. 数据绑定查询是很安全的;
13. 为过滤允许传递文件名或路径的参数,可选用basename 或realpath 之类的函数;
14. 要注意攻击者很有可能会在传递的参数中使用NULL(URL中的表示为%00),这可使字符串终止;
15. 永远不要用被污染的数据去指向一个文件名,要坚持过滤输入;
16. exec 函数用于执行shell 命令(类似的还有shell_exec、sysytem、passthru、popen 函数),其风险是相当相17. 当大的,实在要使用须用escapeshellcmd 过滤,其实最好是禁用这些函数;
17. ctype 函数,可用于确定变量的类型和格式;
18. 以cookie 实现持久会话时为了防止cookie 的盗用,不要在cookie 中存储用户敏感信息,可以存储一个一次性的加密的验证字符串(每次重新生成),然后跟数据库里的相比较来确定合法性以及对应的用户,此外还可加入过期时间;
19. 删除cookie 时除了设置过期时间外还要填充一个无用的值,以防止用户时钟不准;
20. 在Apache 的配置文件中的特定站点的<VirtualHost/> 段中定义变量(例如 SetEnv DB_NAME 'mywordpress'),然后在这个站点的文件中就可以通过$_SERVER['DB_NAME'] 来访问了,这样比写在文件中更安全,我们公司就是这么做的,但此时必须要限制用户对phpinfo 函数的调用;
21. 订制session_set_save_handler函数,将会话信息保存至数据库;
22. extension_loaded()判断一个扩展是否有被加载、dl()动态地加载一个PHP扩展;
23. 重要的配置项open_basedir可限制PHP只能在它指定的目录中打开文件(请确保enable_dl是关闭着的);
24. eval()把字符串当做PHP语句执行;
25. mcrypt是PHP的标准加密扩展;

你可能感兴趣的:(PHP,数据库,session,Security,token,extension)