簡體   English   中英

准備好的語句是否完全保護我的網站免受MySQL注入?

[英]Would prepared statements completely secure my website from MySQL injection?

我正在使用預處理語句和MySQLi查詢以防止注入攻擊。 准備好的語句是否完全不需要mysql_real_escape_string? 在保護我的網站時還有什么我應該考慮的嗎?

只要您正確使用准備好的陳述,他們就會。 您必須確保綁定所有外部變量,而不是直接將它們放在查詢中。

例如

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=" . $name);

這個語句正在准備中,但它沒有使用其中一種綁定方法,所以它沒有用。 它仍然容易受到SQL注入攻擊。

要解決這個問題,請確保綁定所有內容......

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);

我正在使用預處理語句和MySQLi查詢以防止注入攻擊。

不要這樣做。 不要使用准備好的陳述來保護任何東西。 這不是准備好的陳述。 它只是讓你的查詢在語法上正確。 並且,作為副作用,語法正確的查詢也不會受到任何攻擊。
因此,只需使用它將數據放入查詢中。

准備好的語句是否完全不需要mysql_real_escape_string?

這是mysql_real_escape_string方面的錯誤。 此功能不能保護您免受任何傷害。 如果您只是將此功能應用於您的數據,則不會使其“安全”。 此函數僅適用於引用的字符串。
雖然是,但使用預准備語句會使此函數過時,以及其他純SQL組合規則。 它實際上完成了你認為mysql_real_escape_string所做的工作。 它確實使任何數據安全(對於SQL)。

在保護我的網站時還有什么我應該考慮的嗎?

當然。
不要談論整個城市 - 這是另一個太廣泛的問題,而是SQL查詢:
准備好的陳述只使數據安全。
因此,您必須處理查詢的動態非數據部分,例如字段名稱,運算符等。准備好的語句對您沒有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM