php - 这是防止 SQL 注入(inject)的正确方法吗?

标签 php mysql sql wordpress sql-injection

向黑客专业人士提出的问题。

我检查了很多类似的问题和 PHP 手册文档以及 W3SCHOOLS,它们都使用不同的方法,我对所有可能的方法都感到疯狂(不确定使用哪一种?)

(例如 PHP 手册使用绑定(bind)参数函数:

$stmt->bind_param('sssd', $code, $language, $official, $percent);

但我无法让它工作,所以我使用了这个:

$queryString = "SELECT * FROM mytable WHERE dom='%s' AND key='%s' AND user_id='%i";
$stmt = $wpdb->get_results( $wpdb->prepare($queryString, $dom, $key, $user_id) );

(我假设 %i 是整数,%s 是字符串)-此代码可以工作,但不确定它是否可以防止 SQL 注入(inject)。

这是否正确并且足以防止 SQL 注入(inject)? (ps 变量通常在此之前创建,例如 $dom = "mydom";)

非常感谢!

最佳答案

在您的示例中,我看到您正在使用 Wordpress 函数,因此按照该路线,您应该查阅文档以了解您正在做什么,特别是 prepare() https://developer.wordpress.org/reference/classes/wpdb/prepare/

其中指出“准备 SQL 查询以安全执行...”

所以本质上是的,你正在保护你的查询,尽管你相信 Wordpress 在内部正确地执行了它。

关于php - 这是防止 SQL 注入(inject)的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229796/

相关文章:

php - 我无法将数据添加到 SQL 记录

php - 如何使用 php 裁剪选定的图像并将裁剪后的图像保存到文件夹中

php - mysqli语句中的@变量

php - 看不到上传到服务器上文件夹的图像

sql - 如何在 SQL Server 2008 中获取每组的第一条和最后一条记录?

sql - 如何在 Postgresql 的时间戳中添加文化不变信息?

mysql - 连接没有中央键源表的列

php - 使用 Zend_Db 类避免 MySQL 注入(inject)

php - 如何指定 "any character"包括双引号、gt、lt、等于

mysql - 为什么 SQL 条件不匹配 "OR"子句?