比方说,我有这样的代码: $dbh = new PDO("blahblah"); $stmt = $dbh->prepare('SELECT * FROM users where username = :username'); $stmt->execute( array(':username' => $_REQUEST['username']) ); PDO文件说: 准备报表的参数不需要引用; 司机为你处理。 这真的是我需要做的,以避免SQL注入? 这真的很简单吗? 如果它有所作为,你可以假设MySQL。 另外,我真的只对使用SQL注入准备好的语句感到好奇。 在这种情况下,我不关心XSS或其他可能的漏洞。
即使使用mysql_real_escape_string()函数,是否有SQL注入的可能性? 考虑这个示例情况。 SQL是像这样在PHP中构build的: $login = mysql_real_escape_string(GetFromPost('login')); $password = mysql_real_escape_string(GetFromPost('password')); $sql = "SELECT * FROM table WHERE login='$login' AND password='$password'"; 我听到很多人都对我说,即使使用了mysql_real_escape_string()函数,这样的代码仍然是危险的,可能会被破解。 但我想不出任何可能的利用? 这样的经典注射: aaa' OR 1=1 — 不工作。 你知道任何可能通过上面的PHP代码注入?
如果用户input未经修改而插入到SQL查询中,则该应用程序易受SQL注入的影响 ,如下例所示: $unsafe_variable = $_POST['user_input']; mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')"); 这是因为用户可以input类似的value'); DROP TABLE table;– value'); DROP TABLE table;– ,查询变成: INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;–') 可以做些什么来防止这种情况发生?