Sql注入:此代码安全吗


Sql Injection: is this code safe?

我有一个API服务器,我需要将所有get数据放入数据库

我在连接到数据库后使用此代码:

foreach ($_GET as $key => $value)
$_GET[$key] = mysql_real_escape_string($value);

我的代码安全吗?

不,您的代码不安全!因为我们看不到您是如何将数据放入查询中的——这是最重要的。

你可以做很多错误的事情,比如:

$sql = "INSERT INTO {$_GET[table]} ({$_GET[column]}) VALUES ('{$_GET[value]}')";

只有最后一个值是安全转义的,前两个值不是!

此外,mysql_real_escape_string()评估正在进行的数据库连接的编码设置。你以前连接过数据库吗?你设置好编码了吗?

最后:在你真正需要之前不要逃避。过早的逃避会导致各种问题,因为预先逃避的数据可能同时被用于其他事情。

目前确实如此。但请注意,所有mysql_函数都已弃用,将从PHP中删除,不再受支持。这就带来了自身的安全隐患。

考虑使用

mysqli_real_escape_string

更多信息

http://php.net/manual/en/function.mysql-real-escape-string.php

请阅读红块并注意有关默认字符集的安全注释。适用于这两种功能。