前两天QA提上来一个问题,说是页面上会弹出框来。本以为是我的测试JS代码忘记删掉了,后来再看才发现是有人提交测试评论时,故意协商了JS代码,页面直接解析该JS就有弹出框了,代码如下:

    <script>alert("1")</script>

     后来在网上一搜才知道这个叫做XSS***,即(Cross Site Scripting) 跨站脚本***。是Web程序中最常见的漏洞。指***者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到***者的目的.  比如获取用户的Cookie,导航到恶意网站,携带***等。

 

    假如有下面一个textbox

    <input type="text" name="address1" value="value1from">

    value1from是来自用户的输入,如果用户不是输入value1from,而是输入 "/><script>alert(document.cookie)</script><!- 那么就会变成

     <input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

    嵌入的JavaScript代码将会被执行

    或者用户输入的是  "οnfοcus="alert(document.cookie)      那么就会变成 

    <input type="text" name="address1" value="" οnfοcus="alert(document.cookie)">

     事件被触发的时候嵌入的JavaScript代码将会被执行

     ***的威力,取决于用户输入了什么样的脚本

    对它的介绍在一下链接中介绍的很详细,可惜主要讲的是ASP.NET的,不是JAVA的。但是原理是一样的。

    http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

    XSS之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。以下链接介绍的是一个老外写的JAVA类,

    http://josephoconnell.com/java/xss-html-filter/

    另外还找到一篇文章介绍了两个类似的JAVA类:

    http://www.myhack58.com/Article/html/3/7/2008/18645.htm

    使用起来很简单,就是后台在接收到提交信息后,调用下该类的filter方法,进行一下替换,得到安全的内容。

    当然,以上介绍的都是后台处理的方式,前端也可以处理,同样是替换,但是不够友好型。以下网站就介绍了一段JS过滤XSS***的方法:

    http://blog.csdn.net/a0820010401/article/details/9169131

 

    哎!码农真的不是这么好做的啊,很多代码都是不安全的,要做完全的防范啊!不然,用户信息轻易的就被弄走了!