mysql_real_escape_string() 和 mysql_escape_string() 足以保證應用程式安全嗎?

Mary-Kate Olsen
發布: 2024-11-02 03:27:03
原創
817 人瀏覽過

Are mysql_real_escape_string() and mysql_escape_string() Sufficient for App Security?

mysql_real_escape_string() 和 mysql_escape_string() 對於應用程式來說夠安全嗎?

簡介:

維護應用安全至關重要,資料庫安全發揮重要作用。雖然 mysql_real_escape_string() 和 mysql_escape_string() 通常用於防止 SQL 注入,但人們對其功效感到擔憂。

問題:

mysql_real_escape_string() 會嗎和 mysql_escape_string() 足以滿足應用程式的需要安全性?

答:

否。

mysql_real_escape_string() 和的漏洞mysql_escape_string()

由於存在多個安全漏洞,這些函數不足以實現全面的應用程式安全:

SQL 注入:

  • 儘管聲稱有保護措施,但這些函數仍然容易受到SQL 注入的攻擊,尤其是涉及到PHP 中使用的變數時。查詢。
  • 範例:

    $sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
    登入後複製

    可以透過插入惡意資料來利用此查詢,從而可能導致未經授權的資料庫存取。

喜歡SQL攻擊:

  • LIKE 查詢可以使用特殊字元(例如「%」或「_」)進行攻擊,以繞過預期的搜尋條件。
  • 範例:

    $sql = "SELECT url FROM GrabbedURLs WHERE " . mysql_real_escape_string($field) . " LIKE '%s%%' LIMIT %s";  
    登入後複製

    此查詢可讓攻擊者擷取所有記錄,構成安全性

字元集漏洞:

  • Internet Explorer 仍然容易受到字元集漏洞的攻擊,允許駭客注入任意SQL 指令,包括SQL注射。

建議解決方案:已準備好語句

為了解決這些漏洞,建議的安全措施是使用準備好的語句。

  • 準備好的語句利用資料庫伺服器固有的安全機制。
  • 它們透過只執行預期的 SQL 來防止 SQL 注入。
  • 準備好的語句也可以簡化程式碼並最大限度地減少

範例:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.stackoverflow.com/';
$limit = 1;

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs WHERE ' . $column . '=? LIMIT ' . $limit);
$statement->execute(array($value));
while (($data = $statement->fetch())) { }
登入後複製

結論:

mysql_real_escape_string() 和mysql_escape_string() 提供某些SQL 注入攻擊的保護有限。然而,它們不足以保護應用程式免受各種其他漏洞的影響。建議的方法是使用準備好的語句來確保全面的應用程式安全性。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!