php - 如果我使用 $_GET 变量进行 MYSQL 查询,空字节注入(inject)会影响我吗?

标签 php mysql security get

<分区>

Possible Duplicate:
What are the best PHP input sanitizing functions?

假设我有一个名为“id”的$_GET 变量。然后在 mysql 查询中使用 $_GET 变量来检索一些数据,例如 SELECT text FROM database WHERE id=$_GET['id']; 假设我正在使用常见的安全函数,如 mysql_real_escape_string()addslashes()strip_tags()?

最佳答案

Would null byte injection in my $_GET variable affect me assuming I'm using common security functions like mysql_real_escape_string(), addslashes(), and strip_tags()?

可能不会,但是更简单的注入(inject)影响您。尝试将其作为 GET 参数传递:

99999 OR id=0

并通过上面显示的查询运行它。它将允许注入(inject)任意 SQL 即使使用 mysql_real_escape_string

与流行的看法相反,如果您的值未包含在引号中,mysql_real_escape_string()保护您。

如果查询数值,要么在将值插入字符串之前测试它是否为数字,要么将值放在引号中:

 $id = mysql_real_escape_string($_GET["id"]);
 $query = "SELECT text FROM database WHERE id='$id'";

addslashesstrip_tags 在此上下文中完全没有值(value)。它们仅用于破坏数据,但在向数据库中插入内容时不会增加安全性。摆脱他们。 (strip_tags 稍后在 HTML 页面上输出内容时可能适用。)

关于php - 如果我使用 $_GET 变量进行 MYSQL 查询,空字节注入(inject)会影响我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267614/

相关文章:

php - mysql统计字段中特殊字符的出现次数

php - 在与当前目录不同的目录中运行 Composer

php - 根据 Laravel 中的另一个下拉列表选择值填充下拉列表 - 编辑表单

mysql - 如何从MYSQL数据库获取数据

mysql - 如何检查用户请求正在访问(未更新)表(MySQL)

php - 使用 php mysql 和 jquery 显示数据库动态内容

security - 将用户对象存储在 cookie 中安全吗?

php - 将图像从 URL 保存到 wordpress 媒体库

security - 如何安全地进行跨域认证?

php - 将信息从 Web 表单安全地发送到电子邮件地址