XSS漏洞
Posted Java夜未眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS漏洞相关的知识,希望对你有一定的参考价值。
跨站脚本漏洞,简称XSS(Cross Site Scripting) , 是最常见的Web应用程序安全漏洞.
XSS原理
XSS攻击是指在网页中嵌入客户端恶意代码,通常是javascript.当用户访问了被嵌入恶意代码的网页时,恶意代码就会在用户的浏览器上执行.所以,基本上JavaScript能做什么XSS就能做什么.
JavaScript可以用来获取用户的Cookie,动态修改网页内容,URL跳转等.那么意味着存在XSS漏洞的网站,用户的Cookie可能被盗取,页面会被篡改,或者被导航到其他网站
XSS类型
XSS主要分为三类,分别是反射型,存储型,DOM型
反射型 XSS
反射型XSS是最容易出现的一种漏洞.当用户访问一个带有XSS代码的URL时,服务器端接收到数据后,把带有XSS代码的数据发送到浏览器,浏览器渲染后,执行了该代码,最终造成XSS漏洞.
<%
String name = request.getParameter("username");
out.println(name);
//username = "<script>alter('XSS漏洞')</script>"
%>
上述代码,如果输入的username 是一段XSS代码,那么则会执行该段XSS代码.假若有人利用此漏洞,构造一段获取用户Cookie并发送到指定网站的XSS代码.并将该链接发送给该网站的用户,用户访问了该链接后,则私密信息会被窃取.
存储型XSS
当攻击者提供一段包含XSS代码的数据提交到服务器并且被存储后,用户再次访问页面时,这段XSS代码被服务器重新读出来,被浏览器执行,造成XSS跨站攻击.这就形成了存储型的XSS.
存储型的XSS无需用户主动去触发,危险性比较大.
<input type="text" name="username" value="" />
// username 输入" /><script>alert('XSS漏洞')</script>,提交到服务器并被保存
保存后如果用户名显示如下
欢迎,${username}
编辑,回限如下
<input type="text" name="username" value="${username}" />
那么此时浏览器渲染后的html代码是
<input type="text" name="username" value="" /><script>alert('XSS漏洞')</script>" />
不难理解,保存后.上面2段使用了username的代码均出现了XSS
DOM型XSS
DOM即文档对象模型,在网页的制作中经常使用JavaScript来动态操作DOM的内容,结构或者样式.顾名思义DOM型XSS是在操作过程中产生的.
<input type="text" name="content" value="" />
<div id="echo"></div>
<script>
$("[name=content]").change(function(){
$("echo").html($(this).val());
});
</script>
上述代码是将文本框输入的内容直接回显到echo的标签里面,如果输入的是一段XSS脚本则会出现DOM型XSS
XSS利用
会话劫持
XSS蠕虫
XSS蠕虫具备自传播性,估计很多人当年都曾经看过朋友转发的空间说说或者微博,然后自己也莫名其妙转发了.其实原理很简单,就是应用存在XSS漏洞,而攻击者发布了带有XSS攻击的微博.只要该微博被查看,就自动执行XSS脚本,进行转发操作.此时你登录着,便已你的身份进行转发.大概流程如图:
XSS 修复
XSS形成的原因是因为网站对用户的输入和输出没有严格的过滤.导致用户可以再你的网站上面输入并执行JavaScript等客户端语言.所以修复此类漏洞主要采用的方法是过滤或者转义一些特殊的字符.
输入输出
在HTML里面 【<】【>】【”】【’】【&】这几个符号是标签和属性的组成部分,一般输入输出都要进行转义,或者过滤.
可用的如 php 的 htmlspecialchars ,JSTL 的 escapeXml 或者FreeMarker 的
<#escape x as x?html></#escape>
HttpOnly
Set-Cookie的时候使用HttpOnly 属性的话可以防止JavaScript操作该Cookie,从而有效反正XSS攻击者获取到用户的会话ID,但是本身并不防止XSS漏洞.只是XSS漏洞出现后防止会话劫持
以上是关于XSS漏洞的主要内容,如果未能解决你的问题,请参考以下文章