由于测试中的双重逗号,Javascript失败

时间:2016-04-18 05:30:29

标签: javascript php html twitter-bootstrap

我的数据库中保存了一些HTML格式的文本,此文本已通过电子邮件保存到datatbase中。

有时,电子邮件有单开或双开的引号,但没有关闭倒置的commans。 因为页面上的其他脚本停止工作。 如何防止我从数据库中读取的这个html代码不会影响我的页面样式或脚本。

您可以将我的应用程序视为简单的电子邮件阅读应用程序。 我从数据库读取的任何电子邮件,即使它有不正确/错误的HTML,我也不希望它破坏我的代码。

请告诉我如何解决这个问题

我正在努力跟随 - Laravel - Bootstrap

1 个答案:

答案 0 :(得分:-1)

始终逃避从客户端收到的数据,否则您将成为XSS(跨站点脚本)的受害者。

如果您真的想这样做,那么有两种方式可以使电子邮件的内容不会影响您的代码。

  1. 的IFrame
  2. Shadow DOM
  3. 它们都有一个独立的上下文而不是父页面,因此它们不会干扰您的代码,除非它们内部的代码手动尝试访问父代。

    以下是两者的样本。 Same on JSFiddle

    <html>
    <head>
    
    </head>
    <body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="iframeParent">
    </div>
    
    <div id="shadowParent">
    </div>
    <script>
        var emailContent = "<h1>helloworld</h1>";
        var iframeContainer = $("#iframeParent");
    
        $('<iframe/>').appendTo(iframeContainer).on("load", function () {
            $(this).contents().find("body").html(emailContent);//firefox
        }).contents().find("body").html(emailContent);//chrome
    
        var shadowContainer = $("#shadowParent");
        alert(shadowDom);
        var shadowDom = shadowContainer.get(0).createShadowRoot();
        shadowDom.innerHTML = emailContent;
    </script>
    </body>
    </html>
    

    注意: Shadom DOM可能不是最好的解决方案,因为它在Firefox上默认不启用。 See this link