使PHP SQL随机查询免于注入?

时间:2014-08-19 22:30:41

标签: php mysql sql mysqli

我已经读过为了防止SQL注入,所有MySQL语句实际上应该是我的mysqli和参数化。上面的代码连接到一个数据库,选择一个随机的动词'行,然后获取与“动词”相交的单元格。使用mysql_fetch_assoc的行和def列(该动词的定义)。

哪些更改会使随机查询免于注入?

        $user_name = "name";
        $password = "password";
        $database = "words";
        $server = "host";

    $db_handle = mysqli_connect($server, $user_name, $password) or die (mysqli_error($db_handle));
    $db_found = mysqli_select_db($db_handle, $database) or die (mysqli_error($db_handle));

        $randVerb = mysql_query("SELECT * FROM verbs ORDER BY RAND() LIMIT 1"); 
        $db_field = mysql_fetch_assoc($randVerb); 
        $definition= $db_field['def']; 

3 个答案:

答案 0 :(得分:1)

SQL注入只能在查询中使用从客户端给出的一些变量。你在这里没有,所以查询是安全的

答案 1 :(得分:1)

SQL中没有任何内容对注入本身就很危险。清理(​​或使查询安全)的想法是当您根据某个用户输入变量运行查询时。

例如,某人正在登录。您将拥有类似

的查询
SELECT COUNT() FROM `users` WHERE `user`='$user' AND `pass`='$pass'

表示 $ pass ="'或1 = 1 - &#34 ;;

他们将作为数据库中的第一个用户登录。因此,在查询中使用变量之前,需要对变量进行清理(基本上,在清理SQL数据时,您需要重新调整引号)。这就是PHP说使用mysqli而不是mysql的原因。

答案 2 :(得分:1)

你必须使用mysqli或PDO,因为不推荐使用mysql_ *,它将在未来的PHP版本中删除!

您的代码是安全的,因为您不使用任何参数。

BAD 代码的一个示例:

mysql_query("SELECT * FROM verbs WHERE id = ".$_GET['id']);

如果要在查询中使用参数,请使用预处理语句!这是一个非常好的教程:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers