我們是不是不能真正做到網站web伺服器端限制用戶ip?
剛才問了個nginx轉發upstream改變轉發來源ip的問題,既然存取請求來源的ip可以被隨意改變,那麼我們在web服務端獲得的ip也就是不能完全相信的了,那麼我們應該什麼方式來限制使用者真實ip,還是確實這條路不可行?
回覆內容:
剛才問了個nginx轉發upstream改變轉發來源ip的問題,既然存取請求來源的ip可以被隨意改變,那麼我們在web服務端獲得的ip也就是不能完全相信的了,那麼我們應該什麼方式來限制使用者真實ip,還是確實這條路不可行?
nginx是 【你】搭建的,還是要 【被禁止的使用者】 搭建的?
HTTP_X_FORWARD_FOR是可以偽造的,但是 REMOTE_ADDR 是改變不了的。
如果是 【被禁止的使用者】 的搭建的:
你可以透過$_SERVER["REMOTE_ADDR"]可以取得到nginx伺服器的IP,直接封。
如果是 【你】搭建的nginx:
雖然可以透過$_SERVER["HTTP_X_FORWARD_FOR"]取得到使用者的IP,但有可能是偽造的。
<code>proxy_set_header X-Forward-For $remote_addr</code>
最好的方法是增加私有的HTTP頭,nginx轉發時增加私有http頭X-GAGAGA(嘎嘎嘎,猜不到吧),使用$_SERVER["HTTP_X_GAGAGA"]獲取,這樣攻擊這即使祥偽造,也不知道需要偽造啥。
<code>proxy_set_header X-GAGAGA $remote_addr</code>
另外,阿里旗下WW現在御用的代理平台HL系統因為HTTP_X_FORWARD_FOR過濾不嚴,精心構造請求可注入。 。 。 (現在新版已經修復)
關於偽造,如果 你用的 Linux/Unix/OSX,自帶的curl就可以實現:
<code>curl abc.com/test.php -H "X-FORWARD-FOR:8.8.8.8"</code>
如果不過濾,剛好有直接透過IP來判斷是否再黑名單或後台有記錄IP操作日誌的功能:
<code>#想注入就注入 curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:' or 'a'='a" #想XSS就XSS curl miaoqiyuan.cn/test.php -H "X-FORWARD-FOR:alert('a')"</code>
我想了個方案,可以設定nginx的時候,加入proxy_set_header X-Forward-For $remote_addr 設定。然後$_SERVER["HTTP_X_FORWARD_FOR"]取得使用者的真實IP,然後再程式裡面進行IP的限制。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。
