学习 xss

前记

    web应用基于webx3框架,前端页面用velocity。在日常环境部署时,安全检测结果有css漏洞,并给出了解决方案。


1. XSS是什么? 

        XSS是 CrossSite Scripting的缩写,中文名称为跨站脚本攻击。

2. 如何实现XSS? 

        XSS是攻击者在Response中加入恶意脚本,脚本会在浏览器中执行,导致用户重要信息泄露。例如在服务器端的Screen java类里添加:

    Code_1: context.put("css","<script> alert(\"My FirstJavaScript\");</script>");   

那么浏览器就会执行这段js脚本,  弹出一个alert对话框


3. 如何防止XSS?

       Webx3.0框架对XSS攻击有很好的解决方案。在webx*.xml配置文件里,默认情况下对所有htm文件进行转义,只有在noescape里配置的不转义。 例如

  <plugins>
                <vm-plugins:escape-supportdefaultEscape="html">
                    <vm-plugins:noescape>
                       <vm-plugins:if-matches pattern="^control\." />
                       <vm-plugins:if-matches pattern="^screen_placeholder" />
                       <vm-plugins:if-matches pattern="^stringEscapeUtil\.escape"/>
                       <vm-plugins:if-matchespattern="^csrfToken\.(get)?hiddenField" />
                   </vm-plugins:noescape>
               </vm-plugins:escape-support>
   </plugins>


     由于Code_1 没有使用noescape,那么就会被webx3.0框架的防止XSS攻击处理,客户端得到的内容为:

  Code_2: &lt;script&gt;alert(&quot;My First JavaScript&quot;);&lt;/script&gt;
  说明:&lt;是<的转义符号,&gt;是>的转义符

     总结: Code_2不会被脚本引擎执行,因此CSS威胁解除。 浏览器的渲染引擎会把Code_2渲染为文字<script> alert("My FirstJavaScript");</script>

  防止XSS攻击的手段为:凡是到VM页面中的内容都会执行HTML escape转义处理,因此<script>将转义为&lt;script&gt;。然而浏览器中脚本引擎只会执行<script>中的 内容,对&lt;script&gt;中的内容置若罔闻,从而避免CSS攻击。&lt;script&gt;只会被html解释器翻译为<script>在页面中显示。

4.  如何避免转义?

     如果这段脚本不是有害脚本,不希望被转义该如何做呢?

    将不希望被转义的内容放置在宏#noescape()..#end中即可,例如#noescape()$css#end,在加载页面时alert("My First JavaScript");就会被执行。或者根据noescape的配置放置在$stringEscapeUtil(ingonreTxt)


5. XSS攻击过程

学习 xss_第1张图片

   图片来自这里

你可能感兴趣的:(学习 xss)