4

mysql_real_escape_string();是否存在仅使用utf8 编码无法保护的 SQL 注入方法列表?

对于整数,我使用intval(); 的是足够安全吗?

对于那些认为我想获得“教程”来破解任何人的人:不,我不会。我只是想知道如何让我的应用程序更安全,我想知道它们是否 99% 能够免受黑客攻击

4

3 回答 3

3

如果给定一个有效的数据库连接,mysql_real_escape_string()则应该在所有情况下对字符串数据都是安全的(此答案中描述的罕见例外)。

但是,字符串之外的任何内容都不会转义:

$id = mysql_real_escape_string($_GET["id"]);

mysql_query("SELECT * FROM table WHERE id = $id");

仍然容易受到攻击,因为您不必“突破”字符串来添加邪恶的附加命令。

于 2011-07-12T15:20:37.143 回答
1

sql注入方法不多。它们总是由于输入没有被正确清理和转义。因此,虽然mysql_real_escape_string()可以使任何字符串安全地包含在数据库查询中,但您应该遵循以下避免技术来保护您的数据和用户免受 sql 注入。

  • 永远不要以超级用户或数据库所有者的身份连接到数据库。始终使用权限非常有限的自定义用户。
  • 检查给定的输入是否具有预期的数据类型。
  • 如果应用程序等待数字输入,请考虑使用 验证数据is_numeric(),或使用 静默更改其类型settype()
  • 使用特定于数据库的字符串转义函数引用传递给数据库的每个非数字用户提供的值。因此mysql_real_escape_string(),将使所有字符串安全地包含在对 mysql 数据库的 SQL 查询中
  • 您还可以学习使用存储过程和准备好的语句,它们往往非常安全但有其他影响

另请参阅:关于 SQL 注入的PHP 页面

于 2011-07-12T15:36:58.750 回答
0

有很多东西可能不受标准方法的保护(例如字符串转义、整数转换),这也取决于您使用的软件版本。例如,utf-8 本身就是一个很大的问题,作为一个小例子(在许多例子中),您应该确保请求是有效的 utf-8(或将其转换为 utf-8)。看一个例子

作为网站的死神,我认为 MySQL 注入保护不能被压缩到一个单一的 SO 答案中,因此我将这些链接作为一般起点。

http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/

还有:搜索mysql injection utf8

于 2011-07-12T15:22:26.667 回答