2008-10-01 91 views
1

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

回答

2

我建议稍微另一种方法:

  • 不过滤传入的用户数据(除预防SQL注入攻击)。用户数据应尽可能保持纯净。
  • 过滤数据库中的所有传出的数据,这是哪里的东西像标签剥离等。应该发生

保持用户数据的清洁让你在它是如何显示的更多的灵活性。过滤所有外发数据是一个很好的习惯(沿着永不相信的数据模型)。

0

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

它看起来像下面这样:

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

重要的是使用白名单 - 寻找你将允许的标签,而不是搜索你不想要的标签。 – 2008-10-01 18:03:53

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

  2. 使用不同的代码系统(BB代码,降价)

  3. 找一些代码网上说已经这样做了,为您实施的基础来使用。例如Slashcode必须执行此,因此寻找其在Perl实现,并使用正则表达式(我认为是有)

2

您没有说明什么论坛是内置的,但如果它的PHP,退房:

http://htmlpurifier.org/

库特征:白名单,搬运,良好的,嵌套,属性,XSS安全标准安全

0

无论你使用什么,一定要知道什么样的HTML内容可能是危险的。

例如一个<脚本>标记非常明显,但在IE中,style>标记与一样糟糕,因为它可以调用JScript命令。

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

<对象>将是一个更多的标记是厌倦的。

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> 

个人的一个论坛,我会用BB代码或降价因为量支持和功能,如实时预览。