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

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP utilise les extensions MySQLI et PDO pour interagir dans les opérations de base de données et le traitement de la logique côté serveur, et traite la logique côté serveur via des fonctions telles que la gestion de session. 1) Utilisez MySQLI ou PDO pour vous connecter à la base de données et exécuter les requêtes SQL. 2) Gérer les demandes HTTP et l'état de l'utilisateur via la gestion de session et d'autres fonctions. 3) Utiliser les transactions pour assurer l'atomicité des opérations de base de données. 4) Empêcher l'injection de SQL, utiliser les connexions de gestion des exceptions et de clôture pour le débogage. 5) Optimiser les performances via l'indexation et le cache, écrivez du code très lisible et effectuez une gestion des erreurs.

PHP est utilisé pour créer des sites Web dynamiques, et ses fonctions principales incluent: 1. Générer du contenu dynamique et générer des pages Web en temps réel en se connectant à la base de données; 2. Traiter l'interaction utilisateur et les soumissions de formulaires, vérifier les entrées et répondre aux opérations; 3. Gérer les sessions et l'authentification des utilisateurs pour offrir une expérience personnalisée; 4. Optimiser les performances et suivre les meilleures pratiques pour améliorer l'efficacité et la sécurité du site Web.

Comment confirmer si Nginx est démarré: 1. Utilisez la ligne de commande: SystemCTl Status Nginx (Linux / Unix), netStat -ano | Findstr 80 (Windows); 2. Vérifiez si le port 80 est ouvert; 3. Vérifiez le message de démarrage NGINX dans le journal système; 4. Utilisez des outils tiers, tels que Nagios, Zabbix et Icinga.

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

Comment configurer Nginx dans Windows? Installez Nginx et créez une configuration d'hôte virtuelle. Modifiez le fichier de configuration principale et incluez la configuration de l'hôte virtuel. Démarrer ou recharger nginx. Testez la configuration et affichez le site Web. Activer sélectivement SSL et configurer les certificats SSL. Définissez sélectivement le pare-feu pour permettre le trafic Port 80 et 443.

Comment configurer un nom de domaine NGINX sur un serveur cloud: Créez un enregistrement A pointant vers l'adresse IP publique du serveur cloud. Ajoutez des blocs d'hôtes virtuels dans le fichier de configuration Nginx, en spécifiant le port d'écoute, le nom de domaine et le répertoire racine du site Web. Redémarrez Nginx pour appliquer les modifications. Accéder à la configuration du test de nom de domaine. Autres notes: Installez le certificat SSL pour activer HTTPS, assurez-vous que le pare-feu autorise le trafic Port 80 et attendez que la résolution DNS prenne effet.

Dans Linux, utilisez la commande suivante pour vérifier si Nginx est démarré: SystemCTL Status Nginx Juges Basé sur la sortie de la commande: si "Active: Active (Running)" s'affiche, Nginx est démarré. Si "Active: Inactive (Dead)" est affiché, Nginx est arrêté.

Le démarrage d'un serveur Nginx nécessite différentes étapes en fonction des différents systèmes d'exploitation: Système Linux / Unix: Installez le package NGINX (par exemple, en utilisant Apt-Get ou Yum). Utilisez SystemCTL pour démarrer un service NGINX (par exemple, sudo systemctl start nginx). Système Windows: téléchargez et installez les fichiers binaires Windows. Démarrer Nginx à l'aide de l'exécutable Nginx.exe (par exemple, nginx.exe -c conf \ nginx.conf). Peu importe le système d'exploitation que vous utilisez, vous pouvez accéder au serveur IP
