2010-02-21 94 views
5

注意:我照顾SQL注入和输出转义其他地方 - 这个问题只关于输入过滤,谢谢。用户输入过滤 - 我需要过滤HTML吗?

我正在重构我的用户输入过滤函数。在GET/POST参数传递到特定类型的过滤器filter_var()之前,我做了以下内容:

现在的问题:将参数传递给像htmLawedHTML Purifier这样的过滤器还是有意义的,还是我可以将输入视为安全的?在我看来,这两个主要不同在于允许的HTML元素和属性的粒度(我不感兴趣,因为我删除了所有内容),但htmLawed文档有一段关于'dangerous characters'的部分,这表明可能有一个原因使用它。在这种情况下,它会是一个理智的配置?

+0

危险字符可能是UTF-8控制字符。 – Jacco 2010-02-21 13:14:46

+0

有关如何摆脱它们的任何建议? – djn 2010-02-21 15:40:55

+1

我并没有真正了解你的注意事项,SQL注入是关于防止SQL查询中令人讨厌的用户输入。事实上,大多数的漏洞都是由于讨厌的INPUT,而不是输出。这些被称为“污点和水槽”漏洞。 – rook 2010-02-21 23:59:30

回答

2

但是也有一些安全的许多不同的方法来XSS。唯一的原因是要知道你的方法是否可以利用水资源是为了测试开发。我建议使用Free XSS vulnerability Scanner *或开放源代码wapiti

说实话我永远不会使用strip_tags()因为你并不总是需要html标签来执行javascript!我喜欢htmlspecialchars($var,ENT_QUOTES);

例如,这一点容易被XSS:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

你不需要<>在这种情况下执行JavaScript的,因为你可以使用 的onmouseover,这里有一个例子攻击:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

ENT_QUOTES将处理将修补此XSS漏洞的双引号。

*我隶属于本网站/服务。

+0

非常好的一点!谢谢! 我在http:// php找到了一个事件列表。net/manual/en/function.strip-tags.php#82180并将数组传递给str_ireplace() - 这应该照顾它。 – djn 2010-02-22 02:00:17

+1

请注意[促销](http://stackoverflow.com/faq#promotion)准则。 – 2011-12-31 00:47:56

0

我觉得你在做什么是安全的,从我的角度来看至少没有HTML代码应该通过你的过滤器获得

+0

-1是的,但JavaScript仍然可以通过这些过滤器。 – rook 2010-02-21 23:51:18