首頁 >資料庫 >mysql教程 >為了安全起見,準備好的語句是否需要`mysql_real_escape_string()`?

為了安全起見,準備好的語句是否需要`mysql_real_escape_string()`?

Patricia Arquette
Patricia Arquette原創
2024-11-01 23:50:29284瀏覽

Do Prepared Statements Need `mysql_real_escape_string()` for Security?

在Prepared語句中使用mysql_real_escape_string

問題:

使用prestring查詢語句?

上下文:

提供的程式碼示範了使用 mysqli 函式庫的準備好的語句查詢。然而,它目前使用 mysql_real_escape_string() 函數來清理使用者輸入。

<code class="php">$consulta = $_REQUEST["term"]."%";

($sql = $db->prepare('select location from location_job where location like ?'));

$sql->bind_param('s', $consulta);
$sql->execute();</code>

答案:

不,準備好的語句提供了針對 SQL 注入的固有保護,並且正確使用時的資料操作。它們會自動清理輸入,使 mysql_real_escape_string() 變得多餘。

改進:

雖然查詢正確使用準備好的語句,但較小的修改可以提高其效率。可以不使用bind_param()方法,而是直接使用execute()方法傳遞參數。

<code class="php">$sql->execute([$consulta]);</code>

補充說明:

雖然prepared statements protected針對SQL注入,它們在輸出到頁面時不能保證資料的安全性。為了防止潛在的跨站腳本(XSS)攻擊,建議在將資料輸出到瀏覽器之前使用 htmlspecialchars() 對任何資料進行 HTML 編碼。

以上是為了安全起見,準備好的語句是否需要`mysql_real_escape_string()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn