1

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

4

6 回答 6

2

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

http://htmlpurifier.org/

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

于 2008-10-01T18:05:34.773 回答
2

我建议一种稍微替代的方法:

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

保持用户数据干净可以让您更灵活地显示数据。过滤所有传出数据是一个好习惯(沿着从不信任数据模因)。

于 2008-10-01T18:19:26.160 回答
0

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

它看起来像下面这样:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
于 2008-10-01T18:02:24.923 回答
0
  1. 解析输入提供并删除所有与您允许的列表不完全匹配的 html 标记。这可以是一个复杂的正则表达式,或者您可以通过输入字符串的 char[] 进行有状态迭代,构建允许的输入字符串并去除标签上不需要的属性,例如img.

  2. 使用不同的代码系统(BBCode、Markdown)

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

于 2008-10-01T18:05:05.773 回答
0

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

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

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

<object> 将是另一个需要厌倦的标签。

于 2008-10-01T19:47:11.707 回答
0

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

于 2008-11-06T19:06:46.443 回答