如何使用 JavaScript 或 Jquery 删除输入文本上的所有内联脚本或 html 注入

Posted

技术标签:

【中文标题】如何使用 JavaScript 或 Jquery 删除输入文本上的所有内联脚本或 html 注入【英文标题】:How to remove all inline script or html injection on Input text using JavaScript or Jquery 【发布时间】:2020-06-21 15:39:02 【问题描述】:

我知道这类问题可能已经问过很多次了,但我确信这个问题与所有问题都不同。 我在服务器端有一个 Input TextArea 控件,我正在尝试删除所有内联脚本或 html 注入。 通过这样做,我能够摆脱 Script 标签-

$(document).ready(function () 
            $('#btnHTML').click(function () 
                var textarea = document.getElementById("txtar1");
                var stringOfHtml = textarea.value;
                var wrappedString = '<div>' + stringOfHtml + '</div>';
                var noScript = wrappedString.replace(/script/g, "THISISNOTASCRIPTREALLY");
                var html = $(noScript);
                html.find('THISISNOTASCRIPTREALLY').remove();
                var tmp = document.createElement("DIV");
                tmp.id = "tmp";
                tmp.innerHTML = html.html().replace(/THISISNOTASCRIPTREALLY/g, 'script');
                document.body.appendChild(tmp);
                alert(html.html().replace(/THISISNOTASCRIPTREALLY/g, 'script'));
            );
<textarea id="txtar1" style="width:200px;height:100px"></textarea><br/>
<input type="button" id="btnHTML" value="Remove HTML" />

但我的目的并没有解决,我正在尝试限制或删除所有类型的内联脚本注入。几个例子是-

<div>
<table border="2">
<tr>
<td><b>ABCD</b></td>
<td onclick="javascript:alert('Hello')">
EFGH</td>
</tr>
</table>
</div>

<div>
<table border="2">
<tr>
<td><b>Test</b></td>
<td alert('Hello')>
Success</td>
</tr>
</table>
</div>

<META HTTP-EQUIV="refresh" CONTENT="1;url=http://www.test.com">
<BR SIZE="&alert('Injected')"> 
<DIV STYLE="background-image: url(javascript:alert('Injected'))">

任何帮助或建议都会非常有帮助。

【问题讨论】:

【参考方案1】:

不使用内联 JavaScript &lt;script&gt; ... source ... &lt;/script&gt;,而是使用外部 JavaScript 文件并使用 &lt;script src="..."&gt; 导入它们有助于减轻攻击并确保您的网站安全。 在现代浏览器中执行此操作的方法是通过元属性或标头设置“Content-Security-Policy”(CSP)属性。

您可以使用此tutorial 了解更多相关知识。

【讨论】:

感谢@Sachintha 与我分享教程链接。我一直在浏览这个链接,我同意我们可以通过遵循 CSP 来实现。但是有可能在 IE8 中实现吗? docs.microsoft.com/en-us/windows/client-management/mdm/…

以上是关于如何使用 JavaScript 或 Jquery 删除输入文本上的所有内联脚本或 html 注入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 或 jQuery 更改数组内对象的值?

如何使用 jquery 或 javascript 删除索引处的行? [复制]

如何使用 jQuery 或 JavaScript 设置底边距

如何使用 PHP 或 JavaScript/jQuery 禁用地址栏?

如何防止使用 jQuery 或 Javascript 进行双重提交?

当您使用 javascript 或 jquery 将鼠标悬停时,如何使图像或按钮发光?