如何构建你的安全php程序 PHP安全防范知识点滴分享

如何构建你的安全php程序 PHP安全防范知识点滴分享

2012-10-24 13:38:01 | 14次阅读 | 评论:0 | itokit 如何构建你的安全php程序 PHP安全防范知识点滴分享

每个php开发人员都是从开始的安全白痴到经过惨痛经历过,才会注意php安全,在这里我们可以给php新手一些php安全方面的建议,由于所在公司对WEB应用程序性的重视,平台开发语言大部分也是PHP,以我在PHP开发上经验列出几项常见的PHP安全问题进行梳理或解决办法。
每个php开发人员都是从开始的安全白痴到经过惨痛经历过,才会注意php安全,在这里我们可以给php新手一些php安全方面的建议,由于所在公司对WEB应用程序性的重视,平台开发语言大部分也是PHP,以我在PHP开发上经验列出几项常见的 PHP安全问题进行梳理或解决办法。
 
跨站脚本攻击(CSS or XSS, Cross Site Scripting)
 
这个是最常见的 POST 都要过滤可以使用
 
strip_tags, 删除string中所有html标签
 
htmlspecialchars,只对”<”,”>”,”;”,”’”字符进行转义
 
htmlentities,对所有html进行转义
 
用户提交数据常见过程的处理流程
http://img1.itokit.com/uploadfile/2012/1024/20121024014504428.jpg

用户提交处理过程可以从上面的链接图片里详细查看到处理流程的。
 
过滤输入
 
把识别输入做为第一步是因为如果你不知道它是什么,你也就不能正确地过滤它。输入是指所有源自外部的数据。例如,所有发自客户端的是输入,但客户端并不是唯一的外部数据源,其它如数据库和RSS推送等也是外部数据源。
 
1.永远不要相信你的用户。
 
2.Fliter input,Escape output.
 
由用户输入的数据非常容易识别,PHP用两个超级公用数组$_GET 和$_POST来存放用户输入数据。其它的输入要难识别得多,例如,$_SERVER数组中的很多元素是由客户端所操纵的。常常很难确认$_SERVER数组中的哪些元素组成了输入,所以,最好的方法是把整个数组看成输入。
 
SQL注入问题
 
查询条件尽量使用数组方式,这是更为安全的方式;
 
开启数据字段类型验证,可以对数值数据类型做强制转换;
 
使用自动验证和自动完成机制进行针对应用的自定义过滤;
 
会话劫持
 
最常见的针对会话的攻击手段是会话劫持。它是所有攻击者可以用来访问其它人的会话的手段的总称。所有这些手段的第一步都是取得一个合法的会话标识来伪装成合法用户,因此保证会话标识不被泄露非常重要。
 
PHP自带的函数使用注意事项
 
1.include(),require()和fopen(),include_once(),require_once()这些都可以远程调用文件:除了依靠php.ini里的allow_url_fopen设为off禁止远程使用文件和open_base_dir禁止使用目录以外的文件外,你还得事先声明好只能包含哪些文件
 
2.fopen(),file(),readfile(),openfile(),等也是该特别留意的地方。函数本身并没什么,它们的作用是去打开文件,可是如果对变量过滤不彻底的话,就会泄露源代码。
 
3.fwrite()和它的变体函数这种漏洞想想都想得出,对于用户提交的字符没过滤的话,写入一段php后门又不是不可以。
 
4.unlink()函数,前段时间,phpwind里任意删除文件就是利用这个函数,对于判断是否删除的变量没过滤,变量可以指定为任意文件,当然就可以删除任意文件的变量。
 
5.eval(),preg_replace()函数,它们的作用是执行php代码,如果字符串没被经过任何过滤的话,会发生什么呢,我就常看见一些cms里面使用,想想,一句话的php木马不就是根据eval()原理制作的吗?
 
6.对于system()这些系统函数,你会说在php.ini里禁止系统函数,对,这也是好办法,可是象一些程序里需要,那是不是就不用了呢?就像上次我看到的一套很漂亮的php相册一样。另外对于popen(),proc_open(),proc_close()函数你也得特别注意,尽管他们执行命令后并没有直接的输出,但你想这到底对黑客们有没有用呢。再这里php提供提供了两个函数,escapeshellarg(),escapeshellcmd(),这两个函数用来对抗系统函数的调用攻击,也就是过滤。
 
7.禁用PHP.ini 中的register_globals。这可以防止攻击者通行URL访问PHP指令或变量。
 
8.使用php.ini 里的“安全模式”作为最终的错误捕捉方法,但是不能指望用它来得到充分的安全性。
 
9.不能依靠session.referrer_check 来进行错误检查
 
10.用户从应用程序 注销时,使用session_destroy 显式地结束会话。
 
总之,要注意每一个细节
 
其他安全建议
 
1.有公共的操作方法做必要的安全检查,防止用户通过URL直接调用;
 
2.缓存需要用户认证的页面;
 
3.用户的上传文件,做必要的安全检查,例如上传路径和非法格式,官方的扩展类库中的ORG.Net.UploadFile类提供了上传类的安全解决方案。
 
4.非必要,不要开启服务器的目录浏览权限;
 
5.于项目进行充分的测试,不要生成业务逻辑的安全隐患(这可能是最大的安全问题);
 
6.保护模板文件,因为模板文件中可能会泄露数据表的字段信息(如Smarty 里template)源码暴露 .inc 结尾的文件 index.php.bak (如EditPlus等编辑器生的备份文件)Require 或 include 的文件使用不安全的数据
 
7.再次强调:不要相信不是你自己显式声明的数据。不要 Include 或 require 从$_GET, $_POST 或 $_COOKIE 中得到的文件。
 
安全是一种相对的度量,而不是绝对的标准。
 
如果你在设计你的应用的时候没有考虑安全,你命中注定将要坚持不懈的来寻找新的安全漏洞。仔细的写程序并不能弥补糟糕的设计。
 
/* 算然说凡事都可“亡羊补牢”,但终究还是“防胜于补”。当安全成为系统本身的一部分,而不是额外的开销时,不但能降低实现安全所产生的成本,同时也能提高系统的完整性。至少,在整体上系统是处于安全的保护中。但是,不论是系统设计时期还是编码时期,安全总是应当是随时考虑的一部分。 */
 
一个系统是否安全,很大程度上取决于开发人员是否关注安全。

php安全的其他方面推荐文章:
1、 PHP安全配置(1)
2、 确保PHP安全,不能违反的四条安全规则
3、 PHP安全基础原则与方法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值