Nginx, en tant que serveur Web et serveur proxy inverse hautes performances, est largement privilégié par les architectes de sites Web. Mais lorsque nous utilisons Nginx, nous devons également prêter attention aux problèmes de sécurité, notamment lors du traitement des URL.
En raison de la flexibilité de Nginx, si nous n'adoptons pas certaines stratégies de sécurité des URL, nous pourrions être soumis aux attaques suivantes :
Formule d'expression régulière
if ($http_user_agent ~* "some evil expression") { return 403; }
# block ip sends more than 100 requests per 5 seconds limit_conn_zone $binary_remote_addr zone=one:10m; limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s; server { location / { limit_conn one 10; limit_req zone=two burst=5 nodelay; } }
location ~* (.php|.asp|.ashx)/?$ { if ($args ~* "select.*from") { return 403; } }
Cet exemple utilise le module if intégré de Nginx pour empêcher les attaquants d'utiliser des instructions select pour obtenir des données de la base de données si cela se produit. , retour 403 Accès interdit.
4. Prévenir les attaques XSS
Pour les attaques XSS, nous pouvons renforcer la détection des entrées. Si une éventuelle attaque XSS est détectée, la connexion peut être redirigée vers une URL sécurisée ou un message d'erreur peut être renvoyé.
if ($args ~* "<script.*>") { return 403; }
Cet exemple utilise le module if intégré de Nginx pour détecter s'il y a du contenu avec des balises de script imbriquées dans l'URL.
5. Prévenir les attaques CSRF
Lorsque vous utilisez Nginx, afin de prévenir les attaques CSRF, vous devez interdire les requêtes provenant de sites externes. Par exemple, vous pouvez ajouter la configuration suivante :
location / { if ($http_referer !~ "^https?://$host/") { return 403; } }
Cet exemple utilise le module if intégré de Nginx pour le limiter à la réception uniquement des requêtes envoyées par le site $host. Nginx renverra 403.
6. Vulnérabilité anti-téléchargement de fichiers
Afin d'empêcher l'accès à des fichiers inappropriés, tels que des documents privés, des scripts, des fichiers de configuration, etc., veuillez utiliser la stratégie suivante :
location ~* .(xls|doc|pdf)$ { valid_referers none blocked server_names; if ($invalid_referer) { return 401; } }
Cet exemple utilise le module valid_referers intégré de Nginx Lorsque la requête provient d'un site non autorisé, 401 sera renvoyé.
7. Interdire l'accès à certaines URL
Dans les projets réels, certaines URL peuvent être utilisées par des attaquants, comme admin.php, login.php, etc. Nous pouvons simplement interdire leur accès.
location ~ /(admin|login).php { deny all; }
La configuration de cet exemple interdit l'accès aux URL se terminant par admin.php et login.php.
8. Exemple complet
Enfin, sur la base de la configuration ci-dessus, nous pouvons obtenir l'exemple complet suivant :
server { listen 80; server_name yourdomain.com; # 设置过滤规则 location / { # 禁止非法请求 limit_conn_zone $binary_remote_addr zone=one:10m; limit_req_zone $binary_remote_addr zone=two:10m rate=1r/s; limit_conn one 10; limit_req zone=two burst=5 nodelay; # 防止XSS攻击 if ($args ~* "<script.*>") { return 403; } # 防止SQL注入 if ($args ~* "select.*from") { return 403; } # 禁止admin和login的访问 location ~ /(admin|login).php { deny all; } } # 防止文件下载漏洞 location ~* .(xls|doc|pdf)$ { valid_referers none blocked server_names; if ($invalid_referer) { return 401; } } }
Ce qui précède est le Nginx Politique de sécurité des URL Guide écrit. J'espère que cela pourra vous aider pour votre configuration Nginx et améliorer la sécurité du système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!