首頁 >後端開發 >php教程 >mysql_real_escape_string() 和 mysql_escape_string() 足以保護 MySQL 應用程式嗎?

mysql_real_escape_string() 和 mysql_escape_string() 足以保護 MySQL 應用程式嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 03:03:281047瀏覽

Are mysql_real_escape_string() and mysql_escape_string() Enough to Secure MySQL Applications?

MySQL 安全性:mysql_real_escape_string() 和 mysql_escape_string() 夠嗎?

mysql_real_escape_string() 和 mysql_escape_string() 對於應用程式安全性的功效引發了一些爭論。雖然這些函數可以防止已知的 SQL 注入向量,但它們的限制可能會讓您容易受到更高級的攻擊。

SQL 注入敏感性

儘管使用mysql_real_escape_string(),您可能會在PHP 變數整合到查詢中的場景中,仍然容易受到SQL 注入的影響。例如,考慮以下程式碼:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);</code>

熟練的駭客可以透過以下輸入利用此查詢:

<code class="php">$field = "1=1"
$value = "1"</code>

這繞過了預期的邏輯,而是返回(可能)所有記錄

LIKE 攻擊

mysql_real_escape_string() 無法有效防止LIKE 攻擊,例如:

<code class="php">$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " LIKE " . mysql_real_escape_string($value);</code>

A惡意使用者可以將$value 惡意使用者設定為% 來檢索所有記錄,從而可能暴露敏感資料。

字元集漏洞

即使在 2011 年,Internet Explorer 仍然容易受到字元集漏洞的攻擊。此漏洞可讓攻擊者控制您的資料庫,類似於 SQL 注入。

準備好的語句:主動方法

mysql_real_escape_string() 和 mysql_escape_string() 都容易受到攻擊,因為它們是反應性防禦機制。另一方面,準備好的語句提供了主動的解決方案。透過僅執行有效且已編程的 SQL,準備好的語句可以顯著降低意外 SQL 執行的風險,無論底層資料庫是否有漏洞。

以下是使用準備好的語句的範例:

<code class="php">$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));</code>

與使用 mysql_real_escape_string() 相比,準備好的語句既安全又簡潔。他們依靠資料庫伺服器的保護措施來防範已知和未知的威脅。

以上是mysql_real_escape_string() 和 mysql_escape_string() 足以保護 MySQL 應用程式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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