簡體   English   中英

PHP magic_quotes_gpc漏洞

[英]PHP magic_quotes_gpc vulnerability

我被分配到我公司的一個遺留Web應用程序,經過一兩天的探索,我發現了一個類似於以下內容的SQL注入向量:

mysql_query("SELECT * FROM foo WHERE bar='" . $_GET['baz'] . "'");

我試圖對此執行SQL注入測試,但由於PHP的magic_quotes_gpc模塊已打開,它失敗了。

我知道magic_quotes_gpc 很臟 ,但是我們有數百個 - 如果不是數千個 - 與上面的代碼類似的代碼行。 我們根本無法承擔關閉magic_quotes_gpc ,因為這會讓像這樣的代碼大開。

我想知道上面的代碼是如何“可利用”的,以及我們是否應該立即修復它,或者包括修復它與我們的其他重構任務的任務。

magic_quotes_gpc轉移網站的常用方法是添加包裝函數:

function m($s) {
    if (get_magic_quotes_gpc())
        $s= stripslashes($s);
    return mysql_real_escape_string($s);
}

mysql_query("SELECT * FROM foo WHERE bar='".m($_GET['baz'])."'");

這將解決addslashes無法addslashes字符集的問題,這可能導致它在某些情況下容易受到攻擊,並且通常會使代碼繼續像以前一樣“工作”。

但是從長遠來看,依賴於輸入轉義是不可持續的,因為它會將斜杠乘以您沒有插入數據庫的輸入字符串,並且無法轉義您從其他來源插入數據庫的字符串。 這是magic_quotes_gpc錯誤的真正原因:它將輸出階段編碼應用於輸入階段。

因此,添加包裝器函數,然后慢慢更新所有SQL插值以使用它。 當你得到它們時,你可以關掉魔法引號。

只要魔術引號打開,並且你沒有使用一些特殊的字符編碼,它可以通過它來解決問題,你應該沒問題 - 可以這么說。 問題是,無論出於什么原因,魔術引號都不活躍(服務器更改,配置更改),您將需要修復很多漏洞。

我會在開頭添加一行,以確保啟用magic_quotes,如果它們在服務器配置中被禁用。 那么你或多或少會安全。

暫無
暫無

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

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