• 防止 XSS 攻击 解决方案


    XSS又叫CSS英文缩写为Cross Site Script
    中文意思为跨站脚本攻击
    具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,
    嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的.

    解决方案

    第一。过滤

    过滤 标签 等字符 ,但是这样 对用户是不公平的。

    第二。用asii 码替换

    如 <  >  ! 等 

    第三 。 用 element.innerText 显示用户数据

     这样要写大量的 js

    第四。 使用 <xmp>

    <xmp>标签不解析内部的html元素,而且不执行内部的javascript脚本代码

    但是要防止攻击代码在数据中间插入</xmp>从而绕过保护

    第五。通过 frame 来防止 数据页面攻击 主页面

     使用 document.domain 属性 来控制

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>测试iframe的单向访问</title>
        <style>
            body
            {
             font-size:12px;
            }
        </style>
    </head>
    <script language="javascript">

    //frame1的document
    var oDocument=null;

    //响应frame1的onload事件
    function frame1_onload()
    {    
        //旧的domain
        var sDomainOld=document.domain;
        
        //降级domain
        document.domain="pimshell.com";
        
        //保存frame1的document
        oDocument=frame1.document;
        
        //恢复domain
        document.domain=sDomainOld;
        
        //准备就绪
        button1.disabled=false;
    }

    //改变IFrame的背景颜色
    function changebackcolor()
    {
        if(oDocument.body.style.backgroundColor=="")
            oDocument.body.style.backgroundColor="blue";
        else
            oDocument.body.style.backgroundColor="";
    }

    </script>
    <body>
    为了避免XSS跨站攻击,在大多数html编辑器的设计中,都是要将用户输入的HTML内容进行过滤。过滤代码繁琐暂且不说,关键是不能保证考虑到所有已知和未知的攻击类型。
    <br />
    如果我们能设计一个iframe的单向访问模型,就可以让用户输入的HTML内容在受控的环境中执行,也就不需要再进行过滤了。
    <br />
    举例来说,我们html编辑器所在的主页面为a,嵌入一个iframe为b。a可以访问b的内容,而b却不能访问a的内容。这样的话,b中的HTML内容即使包含攻击代码,也无法发挥作用了。
    <br />
    <br />
    <table>
    <tr>
    <td width="300px;" valign="top">
        <iframe src="http://bb.pimshell.com/pimshell/test/b.htm" id="frame1" onload="frame1_onload();"></iframe>
        <br />
        <br />
        <button id="button1" onclick="changebackcolor();" disabled>--&gt; 改变IFrame的背景颜色</button>
    </td>
    <td valign="top">
        iframe中的代码:
        <br />
        <pre style="background-color:whitesmoke; border:dashed 1px black; padding:4px;">
            &lt;script language="javascript"&gt;

            //domain
            document.domain="pimshell.com";

            //访问主页面试试看
            function geta()
            {
                alert(parent.document.body.innerHTML);
            }

            &lt;/script&gt;    
        </pre>
        <br />
        主页面中的代码:
        <br />
        <pre style="background-color:whitesmoke; border:dashed 1px black; padding:4px;">
            &lt;script language="javascript"&gt;

                //frame1的document
                var oDocument=null;

                //响应frame1的onload事件
                function frame1_onload()
                {    
                    //旧的domain
                    var sDomainOld=document.domain;
                    
                    //降级domain
                    document.domain="pimshell.com";
                    
                    //保存frame1的document
                    oDocument=frame1.document;
                    
                    //恢复domain
                    document.domain=sDomainOld;
                    
                    //准备就绪
                    button1.disabled=false;
                }

                //改变IFrame的背景颜色
                function changebackcolor()
                {
                    if(oDocument.body.style.backgroundColor=="")
                        oDocument.body.style.backgroundColor="blue";
                    else
                        oDocument.body.style.backgroundColor="";
                }

            &lt;/script&gt;
        </pre>
    </td>
    </tr></table>
    </table>



    </div>

    </body>
    </html>

  • 相关阅读:
    Git 使用记录
    AngularJS $http返回的数据类型
    angularJS 使用$http 出现 $http.get(...).success is not a function
    JS数组及其方法(slice,contact...)
    HTML5的localStorage和sessionStorage
    promise async await 结合 demo2
    promise async await 结合 demo1
    git 命令
    git
    new 优先级的题目
  • 原文地址:https://www.cnblogs.com/zengsong-restService/p/3158340.html
Copyright © 2020-2023  润新知