【发布时间】:2011-09-15 08:29:47
【问题描述】:
我正在使用带有 SQLite 3 class 的 PHP 5,我想知道使用带有 FILTER_SANITIZE_STRING 标志的 PHP built-in data filtering 函数是否足以阻止 SQL 注入和 XSS 攻击。
我知道我可以去获取一个大而丑陋的 PHP 类来过滤所有内容,但我希望我的代码尽可能简洁。
请指教。
【问题讨论】:
标签: php security xss sql-injection
我正在使用带有 SQLite 3 class 的 PHP 5,我想知道使用带有 FILTER_SANITIZE_STRING 标志的 PHP built-in data filtering 函数是否足以阻止 SQL 注入和 XSS 攻击。
我知道我可以去获取一个大而丑陋的 PHP 类来过滤所有内容,但我希望我的代码尽可能简洁。
请指教。
【问题讨论】:
标签: php security xss sql-injection
FILTER_SANITIZE_STRING 将删除 HTML 标签,而不是像 & 这样的特殊字符。如果您想将特殊字符转换为实体代码,请防止恶意用户做任何事情。
filter_input(INPUT_GET, 'input_name', FILTER_SANITIZE_SPECIAL_CHARS);
或
filter_input($var_name, FILTER_SANITIZE_SPECIAL_CHARS);
如果你想编码所有值得使用的东西
FILTER_SANITIZE_ENCODED
【讨论】:
如果你只是想构建一个简单的表单并且不想引入任何沉重甚至轻量级的框架,那么请使用 php filters + 并为数据库使用 PDO。除了跨站点请求伪造之外,这应该可以保护您免受一切侵害。
【讨论】:
对 XSS 和 SQLI 使用相同的清理功能是不明智的。对于 XSS,您可以使用 htmlentities 在输出到 HTML 之前过滤用户输入。对于 SQLite 上的 SQLI,您可以使用准备好的语句(更好)或使用 escapeString 在使用它们构造 SQL 查询之前过滤用户输入。
【讨论】:
SQLite3 类允许您 prepare statements 并将值绑定到它们。这将是您的数据库查询的正确工具。
至于 XSS,那和你使用 SQLite 完全无关。
【讨论】:
如果你不相信自己对安全问题的理解足以需要提出这个问题,你怎么能相信这里的某个人会给你一个好的答案?
如果您迟早会删除不需要的字符,那么您将删除用户想要输入的字符。最好针对使用数据的特定上下文进行编码。
查看OWASP ESAPI,它包含大量编码功能。如果您不想引入那么大的库,请查看函数的作用并将相关部分复制到您的代码库中。
【讨论】:
我认为它足以保护您的字符串数据输入,但您可以选择许多其他选项。例如其他库会增加您的应用程序处理时间,但会帮助您处理/解析其他类型的数据。
【讨论】: