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'";
addslashes
和 strip_tags
在此上下文中完全没有值(value)。它们仅用于破坏数据,但在向数据库中插入内容时不会增加安全性。摆脱他们。 (strip_tags
稍后在 HTML 页面上输出内容时可能适用。)