
通過剛剛分析我們發現,其實這些變量,來自http請求的:x-forword-for字段,以及client-ip字段。 正常代理服務器,當然會按rfc規范來傳入這些值。但是,當一個用戶直接構造該x-forword-for值,發送給用戶用戶,那將會怎么樣呢?
圖(1)
第2步,修改x-forword-fox值,我們看看結果

第三步,我們再修改下看看會怎么樣?

哈哈,看到上面結果沒,x-forwarded-for不光可以自己設置值,而且可以設置任意格式值。 這樣一來,好比就直接有一個可以寫入任意值的字段。并且服務器直接讀取,或者寫入數據庫,或者做顯示。它將帶來危險性,跟一般對入輸入沒有做任何過濾檢測,之間操作數據源結果一樣。 并且容易帶來隱蔽性。
結論:上面getip函數,除了客戶端可以任意偽造IP,并且可以傳入任意格式IP。 這樣結果會帶來2大問題,其一,如果你設置某個頁面,做IP限制。 對方可以容易修改IP不斷請求該頁面。 其二,這類數據你如果直接使用,將帶來SQL注冊,跨站攻擊等漏洞。至于其一,可以在業務上面做限制,最好不采用IP限制。 對于其二,這類可以帶來巨大網絡風險。我們必須加以糾正。
需要對getip 進行修改,得到安全的getip函數。
這類問題,其實很容易出現,以前我就利用這個騙取了大量偽裝投票。有它的隱蔽性,其實只要我們搞清楚了,某些值來龍去脈的話。理解了它的原理,修復該類bug將是非常容易。
題外話,做技術,有三步,先要會做,會解決;后要思考為什么要這么做,原因原理是什么;最后是怎么樣做,有沒有其它方法。多問問自己,你發現距離技術真理越來越近。你做事會越來越得心應手的!
作者:chengmo QQ:8292669
新聞熱點
疑難解答