我已经读过为了防止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'];
答案 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