php - 在同一值内保护真正的转义字符串安全吗?

标签 php mysql mysqli

$_GET['id'] = mysqli_real_escape_string($d,$_GET['id']);

代替

$id = mysqli_real_escape_string($d,$_GET['id']);

这是否安全,或者是否有可能 mysqli_real_escape_string() 不起作用,这使得 $_GET['id'] 仍然很危险( SQL 注入(inject))?

最佳答案

转义取决于将要使用数据的上下文。MySQL 真正的转义对 HTML 注入(inject)、格式不正确的 CSV 值或任何其他需要转义字符的文本格式没有任何作用。阅读The Great Escapism (Or: What You Need To Know To Work With Text Within Text) .

当您替换 $_GET 数据时,这意味着您接下来的所有代码现在都必须处理特定的 SQL 转义数据。如果您有任何不处理 SQL 的代码怎么办?这就是为什么这是糟糕的做法。

情况更糟,因为您应该简单地使用参数化查询而不是手动转义。参见 How can I prevent SQL injection in PHP?

关于php - 在同一值内保护真正的转义字符串安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46343863/

相关文章:

php - 用户 'B00608239@localhost' @'SCMSERV2.scm.net' 的访问被拒绝(使用密码 : YES)

php - 如何在 SQL 查询中格式化来自 mysql 数据库的日期

php - 在 PHP 中按顺序重命名所有文件

mysql - 无法使用更新语句更改mysql用户密码

php - INSERT 查询不允许我将数据发布到数据库

php - 使用 PHP 多次查询 mysql 数据库的最有效方法是什么?

php - 检查数据库中是否存在行,如果不存在则显示消息

javascript - 如何从 php 变量中获取值到我们的 javascript 文件中?

php - 创建一个下拉列表,但 php 不起作用

php - 为什么连接到 mySQL 数据库和查询不起作用?