获取客户端IP,很多代码都会拿 HTTP_CLIENT_IP
的值,其次拿 HTTP_X_FORWARDED_FOR
,最后是 REMOTE_ADDR
。
关于这个的讨论见:http://www.douban.com/group/topic/27482290/
比较的好的获取客户端IP和验证IP代码是怎样的
以下内容是听取答案后的总结
1.HTTP_CLIENT_IP
头是有的,只是未成标准,不一定服务器都实现了。
2.HTTP_X_FORWARDED_FOR
是有标准定义,用来识别经过HTTP代理
后的客户端IP地址,格式:clientip,proxy1,proxy2
。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-For
3.REMOTE_ADDR
是可靠的, 它是最后一个跟你的服务器握手的IP
,可能是用户的代理服务器,也可能是自己的反向代理。
关于伪造:HTTP_*
头都很容易伪造。例如使用火狐插件伪造x-forwarded_for
IP为8.8.8.8
,此时清掉cookie再访问http://www.58.com, 它会以为你是8.8.8.8
来的。参考: sf上另一个关于伪造IP的问题
一段不错的获取IP代码:<code>function get_client_ip() { foreach (array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER)) { foreach (explode(',', $_SERVER[$key]) as $ip) { $ip = trim($ip); //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤 //也可以修改成正则验证IP if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { return $ip; } } } } return null; } </code>参考 @joyqi 的思路,有些情况可以考虑只获取
REMOTE_ADDR
(PS:一般不会这样做)
回复内容:
获取客户端IP,很多代码都会拿 HTTP_CLIENT_IP
的值,其次拿 HTTP_X_FORWARDED_FOR
,最后是 REMOTE_ADDR
。
关于这个的讨论见:http://www.douban.com/group/topic/27482290/
比较的好的获取客户端IP和验证IP代码是怎样的
以下内容是听取答案后的总结
1.HTTP_CLIENT_IP
头是有的,只是未成标准,不一定服务器都实现了。
2.HTTP_X_FORWARDED_FOR
是有标准定义,用来识别经过HTTP代理
后的客户端IP地址,格式:clientip,proxy1,proxy2
。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-For
3.REMOTE_ADDR
是可靠的, 它是最后一个跟你的服务器握手的IP
,可能是用户的代理服务器,也可能是自己的反向代理。
关于伪造:HTTP_*
头都很容易伪造。例如使用火狐插件伪造x-forwarded_for
IP为8.8.8.8
,此时清掉cookie再访问http://www.58.com, 它会以为你是8.8.8.8
来的。参考: sf上另一个关于伪造IP的问题
一段不错的获取IP代码:<code>function get_client_ip() { foreach (array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER)) { foreach (explode(',', $_SERVER[$key]) as $ip) { $ip = trim($ip); //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤 //也可以修改成正则验证IP if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { return $ip; } } } } return null; } </code>参考 @joyqi 的思路,有些情况可以考虑只获取
REMOTE_ADDR
(PS:一般不会这样做)
REMOTE_ADDR
不可以显式的伪造,虽然可以通过代理将ip地址隐藏,但是这个地址仍然具有参考价值,因为它就是与你的服务器实际连接的ip地址。
相比之下,前两种ip地址都可以通过http header来伪造,但并不意味着它们一无是处。生产环境中很多服务器隐藏在负载均衡节点后面,你通过REMOTE_ADDR
只能获取到负载均衡节点的ip地址,一般的负载均衡节点会把前端实际的ip地址通过HTTP_CLIENT_IP
或者HTTP_X_FORWARDED_FOR
这两种http头传递过来
后端再去读取这个值就是真实可信的,因为它是负载均衡节点告诉你的而不是客户端。但当你的服务器直接暴露在客户端前面的时候,请不要信任这两种读取方法,只需要读取REMOTE_ADDR
就行了

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

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

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

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

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

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版