[英]Mysqli prepared statement (SQL injection prevention)
在停止使用已棄用的mysql_ *函數后,我切換到了mysqli。 但后來,我注意到非預處理語句對SQL注入是不安全的。 然后,我再次更改了我的代碼。
我所擁有的是以下函數,它檢查數據庫中是否存在變量$ ID ,並打印該行的title值:
function showPostTitle($ID, $mysqli) {
$result = $mysqli -> query("SELECT ID, title FROM blog where ID = $ID");
$row = $result -> fetch_array(MYSQLI_BOTH);
echo $row['title'];
}
我改成了這個:
function showPostTitle($ID, $mysqli) {
$stmt = $mysqli -> prepare("SELECT ID, title FROM blog WHERE ID = ?");
$stmt -> bind_param("i", $ID);
$stmt -> execute();
$stmt -> bind_result($ID, $title);
$stmt -> fetch();
print_r($title);
$stmt -> free_result();
}
我的問題是:這是實施准備好的陳述的正確方法嗎? 另外,我現在從SQL注入安全嗎? 非常感謝誰回答這個問題:)
你的mysqli邏輯似乎很好, PHP手冊中有一些例子,以防你沒有看到它們。
為什么不在消費時選擇ID呢? 當你只在整個結果集中返回一行時,你真的不需要綁定結果,因為我認為在這種情況下會發生(ID是表中的唯一索引),而是使用get_result 。
使用mysqli prepare可以防止所有常見的注入攻擊,但不能使用0天的樣式,而這些攻擊尚未成為驅動程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.