【发布时间】:2010-02-21 09:19:27
【问题描述】:
注意:我负责 SQL 注入和输出在别处转义 - 这个问题仅与输入过滤有关,谢谢。
我正在重构我的用户输入过滤功能。在使用 filter_var() 将 GET/POST 参数传递给特定类型的过滤器之前,我执行以下操作:
- 用mb_detect_encoding()检查参数编码
- 如果不是 ASCII 或 UTF-8,则使用 iconv()(使用 //IGNORE)转换为 UTF-8
- 用a function found on GnuCitizen.org 清理空白
- 通过strip_tags() 传递结果 - 根本不允许使用任何标签,仅 Markdown
现在的问题是:将参数传递给像htmLawed 或HTML Purifier 这样的过滤器是否仍然有意义,或者我可以认为输入是安全的吗?在我看来,这两个主要区别在于允许的 HTML 元素和属性的粒度(我不感兴趣,因为我删除了所有内容),但 htmLawed 文档有一个关于“dangerous characters”的部分,表明可能存在一个使用它的理由。在这种情况下,什么是合理的配置?
【问题讨论】:
-
危险字符可能是 UTF-8 控制字符。
-
关于如何摆脱它们的任何建议?
-
我真的不明白你的意思,SQL 注入就是为了防止在 sql 查询中出现讨厌的用户输入。事实上,大多数漏洞都是因为讨厌的输入,而不是输出。这些被称为“Taint and Sink”漏洞。
-
我正在使用准备好的语句(AKA 参数化查询)来处理靠近数据库的所有内容,AFAIK 这就像它的防弹一样。我特别问自己还有什么else需要小心——而Jacco的评论就是这种情况的一个很好的例子。
标签: php security user-input validation