只是一个简单的问题:以下PHP代码是否安全?还有什么你认为我可以或应该添加?
$post = $_GET['post'];
if(is_numeric($post))
{
$post = mysql_real_escape_string($post);
}
else
{
die("NAUGHTY NAUGHTY");
}
mysql_select_db("****", $*****);
$content = mysql_query("SELECT * FROM tbl_***** WHERE Id='" . $post . "'");
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,我想is_numeric从SQL注入中节省你的时间(尽管你仍然可以打破SQL语句,参见Alex的回答).但是,我真的认为你应该考虑使用参数化查询(也就是预备语句),因为:
下面是一个例子(其中,$db是PDO连接):
$stmt = $db->prepare('SELECT * FROM tbl_Persons WHERE Id = :id');
$stmt->execute(array(':id' => $_GET['post']));
$rows = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)
有关PHP中参数化SQL语句的更多信息,请参阅: