限制HTML输入到文本框

时间:2020-03-06 14:59:22  来源:igfitidea点击:

如何限制用户可以输入到文本框中的HTML类型?我正在使用一些经过Beta测试的自定义软件来运行一个小型论坛,但是我需要知道如何限制HTML输入。有什么建议?

解决方案

文本提交后,我们可以使用PHP中的正则表达式删除与预定义集不匹配的所有/所有标签。

它看起来像以下内容:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)

  • 解析输入提供的内容,并删除与我们允许的列表不完全匹配的所有html标签。这可以是一个复杂的正则表达式,也可以通过输入字符串的char []进行有状态的迭代,以构建允许的输入字符串,并去除诸如img之类的标签上不需要的属性。
  • 使用其他代码系统(BBCode,Markdown)
  • 在线查找一些已经执行此操作的代码,以用作实现的基础。例如,Slashcode必须执行此操作,因此请在Perl中查找其实现并使用正则表达式(我认为在那里)。

我们没有说明构建论坛所使用的内容,但是如果使用的是PHP,请查看以下内容:

http://htmlpurifier.org/
  
  Library Features: Whitelist, Removal, Well-formed, Nesting, Attributes, XSS safe, Standards safe

我建议一个稍微另类的方法:

  • 不要过滤传入的用户数据(除了防止sql注入外)。用户数据应尽可能保持纯净。
  • 从数据库中筛选出所有传出的数据,这就是诸如标记剥离之类的事情应该发生的地方。

保持用户数据的整洁可让我们更加灵活地显示数据。过滤所有传出的数据是一种很好的习惯(以及永不信任的数据模因)。

不管我们使用什么,都一定要告知哪种HTML内容可能是危险的。

例如<script>标签很明显,但是<style>标签在IE中同样糟糕,因为它可以调用JScript命令。

实际上,任何style =" ..."属性都可以在IE中调用脚本。

<object>将是另外一个令人厌烦的标签。

PHP带有一个简单的函数strip_tag来剥离HTML标记。它允许某些标签不被剥离。

Example#1 strip_tags()示例

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

上面的示例将输出:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>

就个人而言,我会使用BBCode或者Markdown,因为它提供了大量的支持和功能,例如实时预览。