我在我的数据库中保存了一些HTML格式的文本,这些文本是从电子邮件保存到数据库中的。
有时电子邮件有单开或双开的倒置逗号,但没有闭合的倒置命令。由于这个原因,页面上的其他脚本停止工作。我怎样才能防止我从数据库读取的html代码不影响我的页面样式或脚本。
你可以认为我的申请是简单的电子邮件阅读申请。我从数据库中读取的任何电子邮件,即使它有不正确的/错误的html,我也不希望它破坏我的代码。
请告诉我如何解决这个问题
我正在做following Laravel - Bootstrap
发布于 2016-04-18 06:47:51
始终对从客户端接收的数据进行转义,否则将成为XSS (跨站点脚本)的牺牲品。
也就是说,如果你真的想这样做,那么有两种方法可以让电子邮件的内容不会影响你的代码。
这两个页面都具有与父页面不同的上下文,因此它们不会干扰您的代码,除非它们内部的代码尝试手动访问父页面。
下面是这两种方法的示例。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>
注意: firefox可能不是最好的解决方案,因为在上它不是默认启用的。See this link
https://stackoverflow.com/questions/36686073
复制相似问题