我如何限制的类型HTML,用户可以输入进一个文本框?我运行一个小型的论坛使用的一些定制软件,我是beta试验,但我需要知道如何限制HTML输入。任何建议?

有帮助吗?

解决方案

我建议一个微的替代方法:

  • 不过滤进入的数据用户(超出了预防sql注射)。用户的数据应该保持作为纯成为可能。
  • 过滤所有传出的数据,从数据库,这是事情像标签剥等。应该发生

保持用户的数据清洁允许更多的灵活性在于它是如何显示。过滤所有传出的数据是一个良好的习惯,以获得进入(沿永远不会相信的数据米姆).

其他提示

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

  

http://htmlpurifier.org/

     

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

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

它看起来像下面这样:

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

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

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

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

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

实际上,任何style = <!> quot; ... <!> quot;属性可以在IE中调用脚本。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top