【问题标题】:User input filtering - do I need to filter HTML?用户输入过滤 - 我需要过滤 HTML 吗?
【发布时间】:2010-02-21 09:19:27
【问题描述】:

注意:我负责 SQL 注入和输出在别处转义 - 这个问题仅与输入过滤有关,谢谢。

我正在重构我的用户输入过滤功能。在使用 filter_var() 将 GET/POST 参数传递给特定类型的过滤器之前,我执行以下操作:

现在的问题是:将参数传递给像htmLawedHTML Purifier 这样的过滤器是否仍然有意义,或者我可以认为输入是安全的吗?在我看来,这两个主要区别在于允许的 HTML 元素和属性的粒度(我不感兴趣,因为我删除了所有内容),但 htmLawed 文档有一个关于“dangerous characters”的部分,表明可能存在一个使用它的理由。在这种情况下,什么是合理的配置?

【问题讨论】:

  • 危险字符可能是 UTF-8 控制字符。
  • 关于如何摆脱它们的任何建议?
  • 我真的不明白你的意思,SQL 注入就是为了防止在 sql 查询中出现讨厌的用户输入。事实上,大多数漏洞都是因为讨厌的输入,而不是输出。这些被称为“Taint and Sink”漏洞。
  • 我正在使用准备好的语句(AKA 参数化查询)来处理靠近数据库的所有内容,AFAIK 这就像它的防弹一样。我特别问自己还有什么else需要小心——而Jacco的评论就是这种情况的一个很好的例子。

标签: php security user-input validation


【解决方案1】:

有许多不同的 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 漏洞的双引号。

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

【讨论】:

【解决方案2】:

我认为你正在做的事情是安全的,至少从我的角度来看,没有 html 代码应该通过你的过滤器

【讨论】:

  • -1 是的,但是 javascript 仍然可以通过这些过滤器实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2011-08-23
  • 1970-01-01
  • 2023-03-23
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多