将HTML输入限制在文本框中

时间:2008-10-01 18:00:08

标签: html user-input markup

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

6 个答案:

答案 0 :(得分:2)

您没有说明论坛的构建内容,但如果是PHP,请查看:

  

http://htmlpurifier.org/

     

库功能:白名单,删除,格式良好,嵌套,属性,XSS安全,标准安全

答案 1 :(得分:2)

我建议采用稍微替代的方法:

  • 不过滤传入的用户数据(除了防止sql注入)。用户数据应尽可能保持纯净。
  • 过滤来自数据库的所有传出数据,这是标签剥离等应该发生的事情

保持用户数据清洁,可以更灵活地显示用户数据。过滤所有传出数据是一个很好的习惯(沿着永不信任的数据模因)。

答案 2 :(得分:0)

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

它看起来像下面这样:

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

答案 3 :(得分:0)

  1. 解析输入提供并删除所有与您允许的列表不完全匹配的html标记。这可以是复杂的正则表达式,也可以通过输入字符串的char []进行有状态迭代,构建允许的输入字符串并在img等标记上剥离不需要的属性。

  2. 使用其他代码系统(BBCode,Markdown)

  3. 在线查找已经执行此操作的代码,以作为实施的基础。例如,Slashcode必须执行此操作,因此在Perl中查找它的实现并使用正则表达式(我假设在那里)

答案 4 :(得分:0)

无论您使用什么,请务必了解哪种HTML内容可能存在危险。

e.g。 a&lt;脚本&gt;标签很明显,但是&lt;风格&gt;标签在IE中同样糟糕,因为它可以调用JScript命令。

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

&LT;对象&gt;将是另一个厌倦的标签。

答案 5 :(得分:0)

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

示例#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,因为提供的支持和功能数量如实时预览。