php - 如果没有准备好的语句,如何防止 SQL 注入(inject)?

标签 php mysql mysqli

防止 MySQL 注入(inject)的最常见建议是准备好的语句(来自 mysqli 的 PDO)。比如说,无论出于何种原因,我无法使用准备好的状态网......我如何保护我的数据?

我很想创建一个如下所示的函数...

function cleanse($val) {
   global $db;
   $val = $db->real_escape_string($val);
   return $val;
}

//Then I use it like
$sql = "select abc from dyf where z='".cleanse($_GET['id'])."'";
$db->query($sql); //etc...

但我不确定这是否可以阻止 1=1 攻击和来自奇怪外来字符的攻击。<​​/p>

是否有一种万无一失的方法可以使我的清理功能安全(没有准备好的功能!)?

我需要将任何字符串转换为 utf-8 吗?

如果我将所有列值括在引号中并使用 mysqli 的 real_escape_string,我可以吗?

还有其他技巧可以使我的清理功能安全地防止注入(inject)吗?

最佳答案

我不会推荐它,但使用mysql_real_escape_string可以做到这一点。

$sql = "select abc from dyf where z='".mysql_real_escape_string($_GET['id'])."'";

但是,如果您可以使用PDO,那么随时使用它,如果您受到限制,这将是一个机会。仅适用于某些版本的 PHP

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

关于php - 如果没有准备好的语句,如何防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683197/

相关文章:

php - mysql 查询 wp_post 列表和类别和日期

php - plugin_dir_path(__ FILE__)和__DIR__之间的区别

javascript - 计算点击 JavaScript 广告 PHP

php - 如何检查php上传文件的目录是否正确?

mysql 用函数替换子选择 - 查询永远不会返回

php - 进入Fk表更新记录

php - 新的 Mysqli 对象为空

php - 在 Laravel 中删除时将外键值设置为默认值

php - 更好的流程同时抓取大量数据

php - 使用 AES_ENCRYPT 时 Mysqli 准备语句出现问题