我已經多次閱讀,使用$ _SERVER ['REMOTE_ADDR']從客戶端獲取IP是安全的,因爲它不能被用戶直接修改(僅通過使用代理等),但它總是返回一個IP。 直到今天,我收到來自我的網站的錯誤電子郵件,查詢檢查IP是否被禁止時發生mysql錯誤。
原始查詢看起來是這樣的:使用
$ip = $_SERVER['REMOTE_ADDR']
,因爲我認爲它不可能是我沒有做$ IP的任何消毒
SELECT * FROM `bans` WHERE `ip`='{$ip}'
,並獲得一個IP做用戶... 修改,我收到一封電子郵件,該查詢失敗:
SELECT * FROM `bans` WHERE `ip`='1'"+order+by+1--+, 111.222.111.222'
(注:我已經把111.222.111.222的攻擊者,而不是實際IP)
我的電子郵件的腳本也需要使用$ _ SERVER [「REMOTE_ADDR」]的IP,所以我得到了「假」 IP在那裏了:
IP: 1'"+order+by+1--+, 111.222.111.222
它很容易消毒,當你知道它可以被修改,但我想知道如何可能嗎?
您是否檢查了相關問題? – Rainulf
你可以跟蹤服務器訪問日誌中的這個請求嗎?那裏的IP地址是什麼? –
我可以,IP是正常的日誌 - 111.222.111.222 - - [14/Jul/2013:00:04:11 +0200]「POST /somefile.php HTTP/1.0」200 561「http:// www。 site.com/some_other_file.php「」Mozilla/5.0(Windows NT 6.1; rv:21.0)Gecko/20100101 – Turshija