所以,我猜php用get_magic_quotes_gpc(); - 但我的问题是:安装php> 5.xxxx时默认是否启用了sql注入保护?我想这是因为我不记得在处理这个问题时我是否启用/禁用了任何选项.另外,mysql似乎没有做任何事情,因为我试图在asp.net/c#中使用mysql执行一些简单的SQL注入(社区... 5件事......)并且它有效.然而,当我在php中尝试相同时 - 它被逃脱了.此外,这是在Windows 7上尝试,我也有debian 4(蚀刻...)但我现在太懒了切换和尝试.提前10倍!
魔术引号不是防止SQL注入的解决方案.到目前为止,进行适当的角色逃避是不够的.只需禁用它并使用带有绑定参数的准备好的SQL语句.请参阅使用PDO的示例:
$pdo = new PDO("mysql:dbname=my_database", $dbUser, $dbPassword);
$sql = "SELECT * FROM users WHERE login = :login AND password = :password";
$stmt = $pdo->prepare($sql);
$stmt->bindValue("login", $_POST["login"]);
$stmt->bindValue("password", md5($_POST["password"]));
$stmt->execute();
$rows = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)
或者一定要正确转义插入的值:
$pdo = new PDO("mysql:dbname=my_database", $dbUser, $dbPassword);
$sql = "SELECT * FROM users WHERE login = " . $pdo->quote($_POST["login"]) . " AND password = " . md5($_POST["password"]);
$rows = $pdo->query($sql)->fetchAll();
Run Code Online (Sandbox Code Playgroud)