Maison  >  Article  >  Opération et maintenance  >  Guide de rédaction de la politique de sécurité des URL Nginx

Guide de rédaction de la politique de sécurité des URL Nginx

PHPz
PHPzoriginal
2023-06-10 20:39:08990parcourir

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 :

  1. Injection SQL#🎜 🎜##🎜🎜 #XSSattack
  2. Téléchargement illégal de fichiers
  3. Attaque CSRF
  4. Demande d'accès illégale, etc.
  5. #🎜🎜 #
  6. Cet article présentera le guide de rédaction de la politique de sécurité des URL Nginx.
1. Conditions préalables

Avant d'écrire la politique de sécurité des URL Nginx, vous devez maîtriser les points de connaissances suivants :

Formule d'expression régulière

    Syntaxe du fichier de configuration Nginx
  1. Bases du protocole HTTP
  2. 2. Filtrage d'entrée
Nginx Vous pouvez utilisez la détection d'en-tête de requête http pour empêcher les requêtes HTTP malveillantes. La méthode d'implémentation spécifique consiste à ajouter une configuration similaire à la suivante au fichier de configuration Nginx :

if ($http_user_agent ~* "some evil expression") {
    return 403;
}

ou à utiliser le module de pare-feu intégré de Nginx pour le filtrage des entrées, comme suit :

# 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;
    }
}
#🎜 🎜#L'exemple est le suivant Choses :

Définissez d'abord deux zones, qui sont des zones de mémoire pouvant stocker des informations d'état. (Cela signifie également que s'il y a de nombreux accès, le coût de cette protection peut être plus élevé)

Si la même adresse IP envoie plus de 100 requêtes HTTP en 5 secondes, procédez au bouclier.
  1. Si la même adresse IP envoie plus de 5 requêtes HTTP en 1 seconde, elle sera bloquée.
  2. 3. Empêcher l'injection SQL
  3. Dans le développement réel, éviter l'injection SQL est un must. Afin d'empêcher les attaques par injection SQL, nous pouvons le configurer comme suit :
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn