美文网首页
浏览器解码

浏览器解码

作者: Linkingg | 来源:发表于2017-12-31 01:16 被阅读0次

    浏览器解码的顺序是: HTML解码->URL解码(目前只发现a标签的href属性会进行该解码)->JS解码
    HTML的解码机制
    <input type="value1" id="value2" value="value3" onclick="value4" />
    

    对于整个HTML页面而言,会进行HTML解码的只有标签内的value部分,即上面所述的value1到value4
    例如

    <input type="&#x62;&#x75;&#x74;&#x74;&#x6F;&#x6E;" value="&#x65;&#x78;&#x65;&#x63;" onclick="&#x63;&#x6F;&#x6E;&#x66;&#x69;&#x72;&#x6D;&#x28;&#x27;&#x31;&#x32;&#x33;&#x27;&#x29;" />
    

    会被解码为

    <input type="button" value="exec" onclick="confirm('123')">
    

    但是

    " (双引号)

    是不会进行HTML解码的

    HTML编码包括实体编码和两种进制编码&#xH(十六进制格式)、&#D(十进制格式)
    JS的解码机制

    对于整个HTML页面而言,会进行JS解码的有两个地方,一个是HTML进行解码的部分,即

    <input type="value1" id="value2" value="value3" onclick="value4" />
    

    标签内的value部分,另一个是<script>标签所包围的区域

    JS只会对变量名、类名、函数名进行UNICODE形式(\uH)的解码

    例如

    <input type="button" value="exec" onclick="\u0063\u006f\u006e\u0066\u0069\u0072\u006d('123')" />
    

    会被解析为

    <input type="button" value="exec" onclick="confirm('123')">
    

    <script>
     var \u0069\u006d\u0067\u0031 = '<img src=@ onerror=alert(123) />';
     \u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074.\u0077\u0072\u0069\u0074\u0065(\u0069\u006d\u0067\u0031);
    </script>
    

    会被解析为

    <script>
     var img1 = '<img src=@ onerror=alert(123) />';
     document.write(img1);
    </script>
    
    JS会对传入函数的参数进行UNICODE形式(\uH)、16进制(\xHH)或者 8进制(\OO)的解码
    <input type="button" value="exec" onclick="confirm('\x31\62\u0033')">
    

    会被解析为

    <input type="button" value="exec" onclick="confirm('123')">
    

    传入的参数要么是数字,要么是字符串,是字符串的话一定要包含在’(单引号)里面,即不能对最外层的'进行编码

    URL的解码规则
    <a href="http://www.baidu.com">link</a>
    

    中的http://不可以被URL编码

    <a href="javascript:alert(3)">link</a>
    

    中的javascript:也不可以被URL编码
    从中可以看出协议是不可以被URL编码的

    相关文章

      网友评论

          本文标题:浏览器解码

          本文链接:https://www.haomeiwen.com/subject/hsfogxtx.html