FILTER_SANITIZE_STRING 是不是足以避免 SQL 注入和 XSS 攻击?

Posted

技术标签:

【中文标题】FILTER_SANITIZE_STRING 是不是足以避免 SQL 注入和 XSS 攻击?【英文标题】:Is FILTER_SANITIZE_STRING enough to avoid SQL injection and XSS attacks?FILTER_SANITIZE_STRING 是否足以避免 SQL 注入和 XSS 攻击? 【发布时间】:2011-09-15 08:29:47 【问题描述】:

我正在使用带有 SQLite 3 class 的 php 5,我想知道使用带有 FILTER_SANITIZE_STRING 标志的 PHP built-in data filtering 函数是否足以阻止 SQL 注入和 XSS 攻击。

我知道我可以去获取一个大而丑陋的 PHP 类来过滤所有内容,但我希望我的代码尽可能简洁。

请指教。

【问题讨论】:

【参考方案1】:

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

更多信息: https://www.php.net/manual/en/function.filter-var.php

【讨论】:

【参考方案2】:

如果你只是想构建一个简单的表单并且不想引入任何沉重甚至轻量级的框架,那么请使用 php filters + 并为数据库使用 PDO。除了跨站点请求伪造之外,这应该可以保护您免受一切侵害。

【讨论】:

【参考方案3】:

对 XSS 和 SQLI 使用相同的清理功能是不明智的。对于 XSS,您可以使用 htmlentities 在输出到 HTML 之前过滤用户输入。对于 SQLite 上的 SQLI,您可以使用准备好的语句(更好)或使用 escapeString 在使用它们构造 SQL 查询之前过滤用户输入。

【讨论】:

【参考方案4】:

SQLite3 类允许您 prepare statements 并将值绑定到它们。这将是您的数据库查询的正确工具。

至于 XSS,那和你使用 SQLite 完全无关。

【讨论】:

【参考方案5】:

如果你不相信自己对安全问题的理解足以需要提出这个问题,你怎么能相信这里的某个人会给你一个好的答案?

如果您迟早会删除不需要的字符,那么您将删除用户想要输入的字符。最好针对使用数据的特定上下文进行编码。

查看OWASP ESAPI,它包含大量编码功能。如果您不想引入那么大的库,请查看函数的作用并将相关部分复制到您的代码库中。

【讨论】:

【参考方案6】:

我认为它足以保护您的字符串数据输入,但您可以选择许多其他选项。例如其他库会增加您的应用程序处理时间,但会帮助您处理/解析其他类型的数据。

【讨论】:

以上是关于FILTER_SANITIZE_STRING 是不是足以避免 SQL 注入和 XSS 攻击?的主要内容,如果未能解决你的问题,请参考以下文章

php强大的filter过滤用户输入

联系表格的必要验证是啥?

php实现验证邮箱格式的代码实例

PHP filter_var() 函数

这个 php 代码清理是多余的还是不正确的? [复制]

在 Java 中对资源使用 try 是不是安全 - 它是不是检查可关闭对象是不是不为空,是不是在尝试关闭它时捕获异常