我们是不是不能真正做到网站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的限制。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Akses fail tapak WordPress adalah terhad: Menyelesaikan masalah sebab mengapa fail .txt tidak dapat diakses baru -baru ini. Sebilangan pengguna menghadapi masalah ketika mengkonfigurasi nama domain perniagaan program mini: � ...

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Menjalankan pelbagai versi PHP secara serentak dalam sistem yang sama adalah keperluan umum, terutamanya apabila projek yang berbeza bergantung pada versi PHP yang berlainan. Bagaimana untuk sama ...

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4
