php编程安全指南
1、一般
 1)lamp系统安全设置
 2)php.ini安全设置
 3)使用MVC框架

2、数据传输
 1)在$_GET的$_POST,$_COOKIE,和$_REQUEST中,消毒和验证之前以编程方式操纵数据中包含的所有数据
 2)SQL注入
定义:代码注入技术,利用一个安全漏洞,在应用程序的数据库层发生。该漏洞是存在的,当用户输入或者不正确的字符串文字转义字符中嵌入SQL语句或用户输入不强类型,从而意外地执行过滤。
 预防:mysql_real_escape_string($string)
 
 3)跨站点脚本(XSS)
定义:安全漏洞,通常在Web应用程序的其他用户浏览网页,它允许恶意web用户将代码注入。这样的例子:包括客户端脚本(即JavaScript)的。
 预防:htmlentities(strip_tags($string))
 
3、浏览器的请求
 1)跨站点请求伪造(CSRF)
定义:攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片tag。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。 
预防:生成一个独特的“令牌”,通常当一个浏览器会话的开始。通过令牌在所有POST和GET请求。继POST/ GET行动,检查存在的会话令牌,然后确认邮寄令牌/ GET存储在会话中的令牌相同。 (像CakePHP的MVC框架,使得这个比较容易实现整个应用程序的统一。)

4、Sessions
 1)杀死一个会话时,销毁会话数据
当session会话完成后(“注销”),销毁其数据,不只是清除cookie,否则恶意用户能重新恢复cookie和再次使用session。可以将$_SESSION中的所有索引置空
 2)以文件形式存储session在网站的webroot文件或存储在数据库
  在服务器上保存session的默认路径可以被劫持的,尤其是在一个共享的主机环境。

5、密码
 1)应用强密码
  需要数字,符号,大写和小写字母的密码
  密码长度应该在12至14个字符
 2)加密
至少使用SHA1()哈希加密(不使用md5()),hash()函数提供了一些额外的哈希选择,包括SHA256。添加一个“特定的应用程序”来加密

6、一般的php.ini配置
 1)Disable register_globals 
  预防: register_globals = Off
 2)Disable magic quotes
  预防: magic_quotes_gpc = Off
 3)Disable error reporting
  预防: display_errors = Off
 4)Enable error logging and save log file to a directory above web root
  预防: log_errors = On; 
   ignore_repeated_errors = On; 
   html_errors = Off; 
   error_log = /path/above/webroot/logs/php_error_log
 5)保存session数据到webroot的目录下
  预防: session.save_path = /path/above/webroot/sessions

7、webroot下载的.htaccess文件
 1)Disable directory listings site-wide
  预防: Options -Indexes

8、重要/敏感文件
 1)防止未经授权的访问/下载
  这包括网站管理/成员,部分网站/数据库配置文件等
 2)使用脚本文件作为中介,作为附件
 3)不断更新你的脚本(WordPress的,phpMyAdmin的,等)的密码。
 4)当你正在使用时可以使phpMyAdmin允许访问,这可防止别人对您的利用"零日漏洞"破坏
 “零日漏洞”(zero-day)又叫零时差攻击,是指被发现后立即被恶意利用的安全漏洞。通俗地讲,即安全补丁与瑕疵曝光的同一日内,相关的恶意程序就出现。这种攻击往往具有很大的突发性与破坏性。
 
9、文件上传
 1)在数据操作前一定要对$_FILES进行验证,判断文件是否已经在 $_FILES 中 
 2)请注意提供的MIME类型可能欺骗或其导致他方式错误
 3)所有用户上传的文件应移动到网站根目录以上的目录
 4)不要执行用户上传的文件,或者用include require等包含用户上传的文件
 5)尽量不要设定脚本类型为application/octet-stream,” “application/unknown,” or “plain/text”

10、其他
在webroot下,被网站开发人员创建和使用的“实用工具”文件/程序,如果不打算被网站用户访问和使用,那么在放到外网之前应该将他们全部删除,降低的网站的安全风险。

php编程安全指南的更多相关文章

  1. 读《Android编程权威指南》

    因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ...

  2. Google Java编程风格指南

    出处:http://hawstein.com/posts/google-java-style.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Comm ...

  3. Google Java编程风格指南中文版

    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...

  4. Java学习笔记(四)——google java编程风格指南(上)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  5. Java学习笔记(五)——google java编程风格指南(中)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  6. Java学习笔记(六)——google java编程风格指南(下)

    [前面的话] 年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油.好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自 ...

  7. MATLAB 编程风格指南及注意事项

    MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...

  8. Swift 编程风格指南(raywenderlich.com 版本号)

    官方 raywenderlich.com Swift 编程风格指南 本文版权归 raywenderlich.com .The Official raywenderlich.com Swift Styl ...

  9. Google的Java编程风格指南(Java编码规范)

    这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是 ...

随机推荐

  1. 数据结构《13》----二叉树 Morris 前序遍历

    三种二叉树的后序遍历的方法: 1. 递归                      O(n) 时间复杂度, O(n) 空间复杂度 2. 迭代(用栈)       O(n) 时间复杂度, O(n) 空间 ...

  2. Inno Setup脚本语法大全

    Inno Setup脚本语法大全 ResourceShare Bruce 11个月前 (10-28) 6136浏览 0评论   Inno Setup 是什么?Inno Setup 是一个免费的 Win ...

  3. Nullsoft教程 NSIS初学者图文教程一

    Nullsoft教程 NSIS初学者图文教程一 来源:互联网 作者:佚名 时间:03-29 00:34:33 [大 中 小] Nullsoft Installation System(nsis) 是一 ...

  4. javascript(脚本语言)

    javascript(脚本语言)一.注释语法:1.单行注释 //注释内容2.多行注释 /*注释内容*/二.输出语法js语言格式,尽量靠下写,属双标签<script type=”text/java ...

  5. Azure SQL 数据库弹性池现已面市

    我们高兴地宣布Azure SQL 数据库弹性池现已正式面市.弹性池自去年试运行以来,得到许多软件即服务(SaaS)供应商和企业开发人员的认可,他们利用弹性池管理持续增长的云数据库和应用程序,成果高效. ...

  6. JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

    上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows& ...

  7. MongoDB国内学术研究(部分)

    1.<MongoDB在煤炭行业GIS数据存储方面的应用> mongoDB的技术介绍占到了文章的60%,剩下的还能说些啥呢,呵呵. 2.<基于MongoDB的矢量空间数据云存储与处理系 ...

  8. 用Rprofile文件配置打开时R的设置

    R中经常会使用一些命令,而且需要重复输入,非常麻烦.如果能够一打开R就直接使用会方便很多. 通过配置一个.Rprofile文件,可以达到我们的目的. 注:本文仅适用于Mac # 创建一个.Rprofi ...

  9. Winform 关于委托与Invoke和Begin Invoke的使用

    这方面的文章已经写得很详细了,特地摘引两篇文章 http://www.cnblogs.com/c2303191/articles/826571.html http://www.cnblogs.com/ ...

  10. Java 存储过程调用

    //配置文件 private static ClientServiceConfigUtil configUtil = new ClientServiceConfigUtil("/Databa ...