web应用常见安全漏洞
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Injection(SQL 注入)
严重性
非常高
概述
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
原理
它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
例子
程序从Http 请求中读取一个sql 查询,
String sql ="SELECT * FROM accountWHERE name = 'Bob'AND password = '123'" request.getParameter(sql);
...
stmt = conn.createStatement();
...
stmt.execute(sql))
在执行execute()之前,并未进行对字符串sql检查,因此存在SQL 注入弱点。
所以,当在输入密码(password = '123')之后+加上or '1'='1'则SQL查询语句变为:SELECT * FROM accountWHERE name = 'Bob'AND password = '123'or '1'='1'这样的SQL注入会使得输入任意密码进入程序,这会使WEB程序本身和使用用户产生极大的安全威胁。
后果
•挂蠕虫、木马、病毒、制作钓鱼网站
•操纵受害者的浏览器、盗取用户的cookie/referer/ip等信息
防范
1.永远不要信任用户的输入,要对用户的输入输出进行校验,可以通过正则表达式,或限制长度,或者使用过滤函数,对单引号和双"-"进行转换等。
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4. 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
Cross-Site Scripting(跨站点脚本(XSS)) 严重性
非常高
概述
它指的是恶意攻击者往Web页面或者客户端脚本的页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
原理
Stored XSS(存储式跨站脚本攻击)
这是最强大的一种XSS攻击,所谓存储跨站攻击是指用户提交给Web应用程序的数据首先就被永久的保存在服务器的数据库,文件系统或其他地方,后面且未做任何编码就能显示到Web页面。
Reflected XSS(反射跨站脚本攻击)
当Web客户端提交数据后,服务器端立刻为这个客户生成结果页面,如果结果页面中包含未验证的客户端输入数据,那么就会允许客户端的脚本直接注入到动态页面中。传统的例子是站点搜索引擎,如果我们搜索一个包含特殊HTML字符的字符串时,通常在返回页面
上仍然会有这个字符串来告知我们搜索的是什么,如果这些返回的字符串未被编码,那么,就会存在XSS漏洞了。
DOM-Based XSS(基于DOM的XSS)
这个漏洞往往存在于客户端脚本,如果一个Javascript脚本访问需要参数的URL,且需要将该信息用于写入自己的页面,且信息未被编码,那么就有可能存在这个漏洞。
例子
Stored XSS(存储式跨站脚本攻击):
后果
如上图所示,不怀好意好意的用户会把恶意代码,如:JavaScript, VBScript, ActiveX, HTML 或Flash等,把它们嵌入到发布的信息中去,然后发送到服务器中,如果服务器没有很好的校验信息,直接把信息转发到用户,这将导致一场XSS攻击灾难。
Reflected XSS(反射跨站脚本攻击)
下面的Java 代码从HTTP Request 中读取一个用户输入、user、再显示给用户
...
out.print(request.getParameter("user"));
...
下面的Jsp 代码从HTTP Request 中读取一个用户输入、user、再显示给用户
...
<%=request.getParameter("user")%>
...
如果可以将未经验证的用户输入直接写入网页,因此这个应用程序就存在跨站点脚本的弱点。设想一下,一个恶意网站使用iframe、连接、图片URL 或表单传送到这个URL :/insecurepage.jsp?user=admin通过构造带有参数的恶意URL攻击,因为没有验证,所以攻击者可以看到许多网站机密的信息。
后果
机密性:跨站点脚本弱点最严重的后果是储存在用户cookies中的信息外泄。这包括可以让攻击者劫持用户的网络服务进程,并让攻击者能使用该用户的相关帐号。
在某些情况下,有可能迫使用户的浏览器执行恶意代码,将受害用户转到含有恶意内容的其他网页,以便于安装木马或结合其他的弱点以存取本机资料。
例子
DOM-Based XSS(基于DOM的XSS)
如上图所示,攻击者构造一个包含恶意Javascript的URL,然后引诱用户请求这个URL。服务器收到请求后没有返回恶意的Javascript。浏览器在处理URL中的数据时,执行恶意代码。
防范
1.校验用户输入,就是只接受有效的数据,如标头、cookies、查询字符串、表单字段以及隐藏字段等,确认是否是正确的数据,拒绝其他所有数据。
2.HTML编码输出:为了在浏览器中正确地呈现“<”,“>”或空格等文本时,我们需要对其进行编码处理,否则浏览器将根据这些特性文本去执行其功能,而不是正确的呈现在页面上。
Cross Site Request Forgery跨站请求伪造(CSRF)严重性
高
概述
尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
原理
在用户会话下对某个CGI做一些GET/POST的事情——这些事情用户未必知道和愿意做,你可以把它想做HTTP会话劫持。攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。
例子
一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并