使PHP SQL随机查询不受注入影响?
我已经读到,为了防止SQL注入,所有MySQL语句实际上都应该使用mysqli和parametered。上面的代码连接到一个数据库,选择一个随机的“verbs”行,然后使用mysql\u fetch\u assoc将与“verb”行和def列相交的单元格作为该动词的定义 什么样的更改可以使随机查询不受注入的影响使PHP SQL随机查询不受注入影响?,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我已经读到,为了防止SQL注入,所有MySQL语句实际上都应该使用mysqli和parametered。上面的代码连接到一个数据库,选择一个随机的“verbs”行,然后使用mysql\u fetch\u assoc将与“verb”行和def列相交的单元格作为该动词的定义 什么样的更改可以使随机查询不受注入的影响 $user_name = "name"; $password = "password"; $database = "words";
$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'];
SQL注入只能在使用客户端提供的某些变量的查询中使用。这里没有任何查询,因此查询是安全的SQL中没有对注入有本质危险的内容。当您运行基于某个用户输入变量的查询时,可以对查询进行清理或使其安全 例如,有人正在登录。您将有一个如下的查询
SELECT COUNT() FROM `users` WHERE `user`='$user' AND `pass`='$pass'
这意味着如果$pass='或1=1-
他们将作为数据库中的第一个用户登录。所以,在查询中使用变量之前,您需要先清理变量,基本上,清理SQL数据时是在转义引号。这就是为什么PHP说要使用mysqli而不是mysql。您必须使用mysqli或PDO,因为mysqli已被弃用,它将在未来的PHP版本中被删除 您的代码是安全的,因为您不使用任何参数 错误代码的一个示例:
如果要在查询中使用参数,请使用准备好的语句!这是一个非常好的教程:此查询中没有参数,因此是安全的。您所听到的参数化是指查询中的占位符,通常在WHERE子句中。说mysqli是传统mysql库的现代替代品是正确的,但PDO/PDO_mysql也很优秀。旁注:您混合了mysql API。这似乎与您之前的问题完全相同。在问题被搁置后复制并粘贴它不是一种理想的做法,但请在评论中添加指示dup未解释的内容。我的意思是更多地关注注入方面,而不是从mysql转换到mysqli。指示的副本没有太多地讨论注入。好吧,所以副本应该是这样的:是的,但是如果不使用准备好的语句,您也可以在其中编写易受攻击的代码!旁注:Mysqli和PDO是相似的。Mysqli的工作速度快了一点,但只支持MySQL数据库,PDO慢了一点,但支持不同的数据库,如postgre、sqlite、mssql等。我是如何使用它的呢?是否有一种相对简单的方法可以将其更改为适用于mysqli的正确格式?请查看本教程:并搜索和阅读一些有关准备好的语句的信息:
mysql_query("SELECT * FROM verbs WHERE id = ".$_GET['id']);