如果我使用$ _GET变量来进行MYSQL查询,那么null字节注入会影响我吗?

use*_*510 1 php mysql security get

可能重复:
什么是最好的PHP输入清理功能?

假设我有一个$_GET名为"id" 的变量.该$_GET变量随后在MySQL查询用来检索像一些数据SELECT text FROM database WHERE id=$_GET['id']; ,我会空字节注入$_GET变量影响我假设我使用的是常见的安全功能,如mysql_real_escape_string(),addslashes()strip_tags()

Pek*_*ica 5

我的$ _GET变量中的空字节注入会影响我,假设我使用的是常见的安全函数,如mysql_real_escape_string(),addslashes()和strip_tags()?

可能不是,但更简单的注射影响你.尝试将其作为GET参数传递:

99999 OR id=0
Run Code Online (Sandbox Code Playgroud)

并通过上面显示的查询运行它.它甚至在使用时 也允许注入任意SQL mysql_real_escape_string.

与普遍看法相反,如果您的价值未包含在报价中,mysql_real_escape_string()不会保护您.

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

 $id = mysql_real_escape_string($_GET["id"]);
 $query = "SELECT text FROM database WHERE id='$id'";
Run Code Online (Sandbox Code Playgroud)

addslashesstrip_tags没有任何价值可言在这方面.它们仅用于破坏数据,但在数据库中插入内容时不会增加安全性.摆脱它们.(strip_tags稍后在HTML页面上输出内容时可能适用.)