对书中38章提到的程序漏洞的一些思考
时间:2009-09-23
来源:互联网
本帖最后由 HDH007 于 2009-9-23 16:24 编辑
书中的第38章写了六种常见的程序漏洞:
1、本地文件包含漏洞
基本上是说register_globals这个东西。
这个设置更新在php 4.2版本changlog中用下面这段话标示出来的
“ATTENTION!! register_globals defaults to 'off' now !!!”
DZ用了一种变通的方式在register_globals这个配置off的时候,使用register_globals的功能。
所以在改DZ的时候还是要小心这类问题。最直接的处理方式就是每个文件内用到的自定义变量都初始化一编。
2、远程文本包含漏洞
这个问题跟前面的问题有一定关联性,也跟register_globals有关。
对于引入文件DZ的做法是尽量使用本地路径的格式包含脚本文件,如果非得用远程包含,尽量采用加密参数的方式传递。
如果文件格式规范的话可以利用正则表达式检查文件合法性。前提是要约定一下主机地址,域名,文件名格式之类的信息。
书中的做法有局限性。
3、脚本命令执行漏洞
过程化的PHP编码对这种问题是没啥办法的。
php中的error_reporting(0)和ini_set('display_errors',0)也没有办法搞定mysql报错,
实际开发过程中基本上都是采用书中提到的方法。要不就在每个sql操作后加 die 。这个比@费事儿多了。
或许在OOP的程序中可以用异常捕获,没用过PHP的OOP,不做讨论。
4、文件上传漏洞
这个比较基础了,谁都知道写php的程序坚决不能允许上传.php文件。
不过可以有个例外,就是上传重定义扩展名,在提取文件的时候再合成下载链接。
5、提交表单漏洞
书里说的是要在浏览器端和服务器端都做要做输入检查。这个肯定没错,不过要考虑系统做检查的承受能力。
系统对输入检查的开销有可能给别有用心的人提供了一个新的漏洞。
比如当注册用户的时候要检查用户合法性。就是要检查用户是否输入了非法字符,要注册的用户名是否已注册之类的。
如果要检查用户名就要查找数据库去对用户名进行对比。用户基数越大,这个对比越费时。
如果用户反复提交,即使始终返回注册失败,也会查询数据库,消耗系统资源。
而这个检查100%是实时的,如果存在这样的检查,我们就要考虑我们的数据库能不能抵挡住浏览器端的恶意刷新提交。
对于这种恶意提交由几种处理方法(不限于以下几种):
1,动态变化的提交地址;
2,验证码(验证问题);
3,限制用户提交次数;
4,表单超时设置。
第一种方法对用户来说是不可见的,有较好的用户体验。
第二种方法很常见,虽然需要用户填写这个无意义的内容比较麻烦,
但是,如果ajax检查及时的话,在提交前验证表单合法性,可以减少正常用户提交失败的几率。
填一次就ok了,不会对用户体验有太大的影响。
第三种方法,限制用户提交次数,会增加系统检查的开销,比如检查IP地址的开销,不过可以解决无限提交的问题。
但是,附带的弊端是,如果一个IP后面有一个局域网,如果这个IP被封,局域网内的所有用户都无法正常提交了。
Dz就存在这种问题。
第四种方法看起来不错,不过需要在程序上做些手脚。用这种方式也完全有可能导致正常用户提交超时。
此外,在检查用户输入的时候要遵守一个原则,程序检查优先处理,需要用到数据库的检查处理尽量靠后。
6、SQL注入漏洞
老生常谈的话题,这里不谈了。
总结一下,书中说的都是可能给系统带来危害的,可被别人利用的漏洞,俺就称之为——可利用漏洞。
其实有很多漏洞,无法被人利用,但是也会影响系统使用。
比如检查访问请求是否来自浏览器,除非程序设计就是允许CURL和远程引用。
否则这种非浏览器请求对站点来说,除了压力,带不来任何的贡献。
如果有可能的话可以试着区分,来自蜘蛛,浏览器,和程序的访问。分别对待。
书中的第38章写了六种常见的程序漏洞:
1、本地文件包含漏洞
基本上是说register_globals这个东西。
这个设置更新在php 4.2版本changlog中用下面这段话标示出来的
“ATTENTION!! register_globals defaults to 'off' now !!!”
DZ用了一种变通的方式在register_globals这个配置off的时候,使用register_globals的功能。
所以在改DZ的时候还是要小心这类问题。最直接的处理方式就是每个文件内用到的自定义变量都初始化一编。
2、远程文本包含漏洞
这个问题跟前面的问题有一定关联性,也跟register_globals有关。
对于引入文件DZ的做法是尽量使用本地路径的格式包含脚本文件,如果非得用远程包含,尽量采用加密参数的方式传递。
如果文件格式规范的话可以利用正则表达式检查文件合法性。前提是要约定一下主机地址,域名,文件名格式之类的信息。
书中的做法有局限性。
3、脚本命令执行漏洞
过程化的PHP编码对这种问题是没啥办法的。
php中的error_reporting(0)和ini_set('display_errors',0)也没有办法搞定mysql报错,
实际开发过程中基本上都是采用书中提到的方法。要不就在每个sql操作后加 die 。这个比@费事儿多了。
或许在OOP的程序中可以用异常捕获,没用过PHP的OOP,不做讨论。
4、文件上传漏洞
这个比较基础了,谁都知道写php的程序坚决不能允许上传.php文件。
不过可以有个例外,就是上传重定义扩展名,在提取文件的时候再合成下载链接。
5、提交表单漏洞
书里说的是要在浏览器端和服务器端都做要做输入检查。这个肯定没错,不过要考虑系统做检查的承受能力。
系统对输入检查的开销有可能给别有用心的人提供了一个新的漏洞。
比如当注册用户的时候要检查用户合法性。就是要检查用户是否输入了非法字符,要注册的用户名是否已注册之类的。
如果要检查用户名就要查找数据库去对用户名进行对比。用户基数越大,这个对比越费时。
如果用户反复提交,即使始终返回注册失败,也会查询数据库,消耗系统资源。
而这个检查100%是实时的,如果存在这样的检查,我们就要考虑我们的数据库能不能抵挡住浏览器端的恶意刷新提交。
对于这种恶意提交由几种处理方法(不限于以下几种):
1,动态变化的提交地址;
2,验证码(验证问题);
3,限制用户提交次数;
4,表单超时设置。
第一种方法对用户来说是不可见的,有较好的用户体验。
第二种方法很常见,虽然需要用户填写这个无意义的内容比较麻烦,
但是,如果ajax检查及时的话,在提交前验证表单合法性,可以减少正常用户提交失败的几率。
填一次就ok了,不会对用户体验有太大的影响。
第三种方法,限制用户提交次数,会增加系统检查的开销,比如检查IP地址的开销,不过可以解决无限提交的问题。
但是,附带的弊端是,如果一个IP后面有一个局域网,如果这个IP被封,局域网内的所有用户都无法正常提交了。
Dz就存在这种问题。
第四种方法看起来不错,不过需要在程序上做些手脚。用这种方式也完全有可能导致正常用户提交超时。
此外,在检查用户输入的时候要遵守一个原则,程序检查优先处理,需要用到数据库的检查处理尽量靠后。
6、SQL注入漏洞
老生常谈的话题,这里不谈了。
总结一下,书中说的都是可能给系统带来危害的,可被别人利用的漏洞,俺就称之为——可利用漏洞。
其实有很多漏洞,无法被人利用,但是也会影响系统使用。
比如检查访问请求是否来自浏览器,除非程序设计就是允许CURL和远程引用。
否则这种非浏览器请求对站点来说,除了压力,带不来任何的贡献。
如果有可能的话可以试着区分,来自蜘蛛,浏览器,和程序的访问。分别对待。
作者: HDH007 发布时间: 2009-09-23
主要是这些漏洞已经出现了很久,所以,这一章没有吸引到我
作者: cnkiller 发布时间: 2009-09-23
主要是这些漏洞已经出现了很久,所以,这一章没有吸引到我
cnkiller 发表于 2009-9-23 17:54
确实是这样,并且这章讲的比较浅,没有深入讨论,不过这毕竟不是一本讨论安全策略类的书籍,呵呵! cnkiller 发表于 2009-9-23 17:54
作者: ivan820819 发布时间: 2009-09-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28