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

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

Mary-Kate Olsen
發布: 2024-11-01 03:03:28
原創
1049 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板