参考链接:
http://www.searchsecurity.com.cn/showcontent_2430.htm
安全性问题的列表:
1、跨站脚本攻击(CSS or XSS, Cross Site Scripting)
2、SQL注入攻击(SQL injection)
3、远程命令执行(Code execution,个人觉得译成代码执行并不确切)
4、目录遍历(Directory traversal)
5、文件包含(File inclusion)
6、脚本代码暴露(Script source code disclosure)
7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting)
8、跨帧脚本攻击(Cross Frame Scripting)
9、PHP代码注入(PHP code injection)
10、XPath injection
11、Cookie篡改(Cookie manipulation)
12、URL重定向(URL redirection)
13、Blind SQL/XPath injection for numeric/String inputs
14、Google Hacking
15.防作弊(灌水机,投票机)
几种常见的web安全问题
跨站代码攻击
XSS攻击,最终都离不开3点:其一是浏览器的解析,其二是脚本语法,其三是脚本需要一定的长度。
对于浏览器的解析是不在话下了,我不能因为这各类型问题的存在就改写浏览器使其不支持脚本解析。
所以,能做就是控制脚本注入的语法要素。比如:javascript离不开:“<”、“>”、“(”、“)”、“;”...等等,所以我们只需要在输入或输出时对其进行字符过滤或转义处理就可以了。
一般我们会采用转义的方式来处理,转义字符是会使用到HTML的原始码(Web工作原理中会介绍),因为原始码是可以被浏览器直接识别的,所以使用起来非常方便。
允许可输入的字符串长度限制也可以一定程度上控制脚本注入。比如:页面表单中姓名,我可以只允许你输入5个字符,请问你还有办法进行Javascript的脚本注入吗?显然不行了。
还需要注意的是:我这里所述的过滤、检测、限制等等策略,一定一定要在Web Server那一端去完成,而不是使用客户端的Javascript或者VBScript去做简单的检查。因为真正的攻击者不会仅仅依赖于浏览器去做攻击,而更多的往往是借助于第三方工具,根本就可以绕过你精心设计制作的客户端Javascript进行过滤、检测或限制手段的。
sql注入
早在十几年前,基于数据库的Web应用刚刚盛行的时候,几乎所有的开发商都忽略了SQL注入弱点,导致当时绝大多数的网站的登录入口形同虚设!为什么呢?先给一个小小的例子,假如以下SQL代码是用来在网站登录入口入执行用户验证时的查询代码:
SELECT count(*)
FROM users_list_table
WHERE username='USERNAME'
AND password='PASSWORD'
以上的USERNAME就是我们登录时提供的用户名,PASSWORD就是我们登录时提供的密码。当用户输入正确的用户名和密码时,这条语句的执行结果将为真(True),否则为假(False),当然为真时我们就认为认证通过,为假时就认为认证失败,即非法登录。试想一下,如果我在输入用户名和密码的时候输入如下的内容:
用户名:a' or 'a'='a
密码:a' or 'a'='a
用代入法把用户名和密码输入值代入到上述的SQL脚本里结果如下:
SELECT count(*)
FROM users
WHERE username='a' or 'a'='a'
AND password='a' or 'a'='a'
相信稍懂一点儿SQL语句的人都知道,这条语句的执行结果就永远是真了!此时你不需要有帐号,就直接登录成功了!你对此漏洞理解的深度同样取决于你的对SQL语句的技能和web安全知识能力。一个具有良好技能的攻击者可能利用此漏洞获取后台DB的结构并逐步获取DB的信息。
总结一下:SQL注入的弱点存在是基于数据库的Web应用,黑客利用精心组织的SQL语句,通过Web接口(通常指我们的Web页面的表单)注入的Web应用中,从而获取后台DB的访问与存取权的一种安全弱点。
解决办法:过滤、合法性检查和长度限制等通用方法.主要限制分号(;),引号(" '),tab键等防止查询语句被中断.
远程命令执行
远程命令执行漏洞一般发生在Web系统允许用户通过Web应用接口访问与管理Web服务器且没有经过严格的输入验证与过滤的情况下的一种Web应用安全漏洞。
简要的解决方案:
1、严格限制运行Web服务的用户权限。就是说你的Web应用可以访问你的服务器系统的用户权限。一般情况一下,我们应该以白名单的形式介定Web应用可以访问服务器系统的权限。这样控制可以从系统级达到安全防范的效果。
2、严格执行用户输入的合法性检查。注意这里的输入不一定是你通过表单从键盘输入,往往是Web应用已经内定了某一些操作供您选择,而此时你可以通过Http抓包的方式获取Http请求信息包经改装后重新发送。详细理解这一部分,请关注我后续将来介绍的《Web工作原理》部分的Http协议原理。
目录遍历
love.ah163.net上有网络硬盘服务,当注册用户登录并开通网络硬盘服务后,即可进入自己的硬盘管理界面,我们来看看它是如何进入某一个目录的,以下是进入某一目录的URL:
http://love.ah163.net/Personal_Spaces_List.php?dir=MyFolder
那现在我把这个URL改装一下:
http://love.ah163.net/Personal_Spaces_List.php?dir=../../../../../../../../../../../../../usr/local/apache/conf/
在浏览器里运行它,会是什么结果呢?结果是:/usr/local/apache/conf/里的所有文件都老老实实的列出来了,通过这种方式,你可以发挥你的想象了,服务器上的东东是不是都差不多可以列出来了?告诉你,还可以随便下载呢!网络硬盘嘛,就是用来上传下载的,所以它提供的功能很完备,破坏性也就很强了。至于它的危害有多大,你自己想去吧,我就不危言耸听了。
简要的解决方案:
1、同样是限制Web应用在服务器上的运行
2、进行严格的输入验证,控制用户输入非法路径
防作弊(博主添加)
投票机,论坛上的灌水机,很多人都见过,这种机器人发帖刷屏,发帖频率高,数据量大,无时间节制,除了严重影响正常访问的用户体验,还严重影响到数据库,无效数据可能很庞大,浪费资源.
解决办法:
1.限制发帖间隔时间
2.增加发帖验证码
没有评论:
发表评论