Sql Injection:这段代码安全吗?

时间:2013-02-04 21:41:58

标签: php mysql

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

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

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

我的代码安全吗?

2 个答案:

答案 0 :(得分:8)

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

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

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

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

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

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

答案 1 :(得分:4)

目前是。但请注意,所有mysql_函数都已弃用,将从PHP中删除,不再受支持。这表明它存在安全隐患。

考虑使用

mysqli_real_escape_string

更多信息

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

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