zoukankan      html  css  js  c++  java
  • XSS防范之Encode(转)

    防范XSS有三道防火墙:数据的输入校验,数据输出Encode,浏览器安全(主要就是CSP),这里主要介绍Encode。

     

    #用于XSS防范的Encode

    用户防范XSS的Encode主要有三种:HtmlEncode,javascriptEncode,urlEncode。每种encode都有不同的使用场景。

    #HtmlEncode

    HtmlEncode将一些字符编码为html实体,比如将 <   编码为  &lt;  这样编码会起到什么效果呢?

    假设页面代码如下:

    <div>${var}</div> 

    如果var的值被注入了恶意代码 <script>alert(1)</script>,我们知道页面返回的时候会直接弹出一个alert框,而如果对var的值进行htmlEncode后页面代码就变成了:

    <div>  
        &lt;script&gt;alert(1)&lt;&#x2F;script&gt;  
    </div> 

    浏览器选后不会弹出alert框,而是将<script>alert(1)</script>显示为纯字符。
    数据在标签或属性中输出时使用。

    #javascriptEncode

    使用对特殊字符进行转义,除数,字母之外,小于127的字符编码使用16进制“xHH的方式进行编码,大于127用unicode

    假设页面中有如下脚本片段:

     

     

        <script>  
        var j="${var}"  
        </script>  

     

    假设var被恶意注入为  ";alert(1);//

        <script>  
        var j="";alert(1);//  
        </script>  

    这样页面又会弹出一个alert框,而如果对  ";alert(1);//  进行javascriptEncode,则变为下面这样,不会产生注入影响

        <script>  
        var j=""x3balertx281x29x3bx2Fx2F"  
        </script>  

    数据在脚本中输出或者在事件中输出时要使用javascriptEncode

    #urlEncode

    urlEncode可以对中文以及特殊字符进行编码,数据在url类型输出时要使用urlEncode,比如href,src

    www.abc.com?name=<script>alert('钓鱼岛')</script>

    对上面这句urlEncode之后就变成了:

    www.abc.com%3fname%3d%3cscript%3ealert(%27%e9%92%93%e9%b1%bc%e5%b2%9b%27)%3c%2fscript%3e

    #为何Encode可以起作用?

    htmlEncode可以防止恶意的标签闭合

    JavaScriptEncode可以防止引号闭合

    urlEncode可以防止标签闭合同时支持中文输入

    1)攻击一般就是通过构造一个js可执行环境或者在既有的js可执行环境里来执行恶意脚本。去除了恶意的标签闭合和引号闭合就可以有效的防止恶意脚本的注册(有些并不是立即执行)和执行。
    2)Encode让浏览器把用户输入作为数据本身而不是作为可执行的代码。
    3)Encode必须用在适当的位置,否则会破坏正常的语义。

     

  • 相关阅读:
    Caliburn Micro 框架 WP8使用研究(二)页面导航
    Windows Phone 8 Fast Resume 快速恢复浅析(二)
    Caliburn Micro 框架 WP8使用研究(一)简介
    当BI迈入云端,分析云为我们带来了什么?
    解读SQL Server 2012中的最新BI功能
    一个典型的BI系统介绍
    SQL Server数据库服务器的负载均衡集群实现方法
    Web数据挖掘在电子商务中的应用
    2012商业智能发展趋势预测
    一个商业智能培训经理眼中的商业智能
  • 原文地址:https://www.cnblogs.com/25miao/p/8682767.html
Copyright © 2011-2022 走看看