Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Panduan penulisan dasar keselamatan URL Nginx

Panduan penulisan dasar keselamatan URL Nginx

PHPz
PHPzasal
2023-06-10 20:39:081084semak imbas

Nginx, sebagai pelayan web berprestasi tinggi dan pelayan proksi terbalik, digemari secara meluas oleh arkitek tapak web. Tetapi apabila menggunakan Nginx, kita juga perlu memberi perhatian kepada isu keselamatan, terutamanya semasa memproses URL.

Disebabkan fleksibiliti Nginx, jika kami tidak menggunakan beberapa strategi keselamatan URL, kami mungkin tertakluk kepada serangan berikut:

  1. Suntikan SQL
  2. XSS attack
  3. Muat turun fail haram
  4. Serangan CSRF
  5. Permintaan tidak sah untuk akses, dsb.

Artikel ini akan memperkenalkan panduan untuk menulis URL Nginx dasar keselamatan.

1. Prasyarat

Sebelum menulis dasar keselamatan URL Nginx, anda perlu menguasai mata pengetahuan berikut:

  1. Ungkapan biasa
  2. Konfigurasi Nginx sintaks fail
  3. Pengetahuan asas protokol HTTP

2. Penapisan input

Nginx boleh menggunakan pengesanan pengepala permintaan http untuk menghalang permintaan HTTP yang berniat jahat. Kaedah pelaksanaan khusus adalah untuk menambah konfigurasi yang serupa dengan yang berikut pada fail konfigurasi Nginx:

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

atau gunakan modul tembok api terbina dalam Nginx untuk penapisan input, seperti berikut:

# 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;
    }
}

Contoh ini melakukan perkara berikut:

  1. Pertama mentakrifkan dua zon, iaitu kawasan memori yang boleh menyimpan maklumat status. (Ini juga bermakna jika terdapat banyak akses, kos perlindungan ini mungkin lebih tinggi)
  2. Sekat jika alamat IP yang sama menghantar lebih daripada 100 permintaan HTTP dalam masa 5 saat.
  3. Sekat jika alamat IP yang sama menghantar lebih daripada 5 permintaan HTTP dalam masa 1 saat.

3. Cegah suntikan SQL

Dalam pembangunan sebenar, adalah perlu untuk mengelakkan suntikan SQL. Untuk mengelakkan serangan suntikan SQL, kami boleh mengkonfigurasinya seperti berikut:

location ~* (.php|.asp|.ashx)/?$ {
    if ($args ~* "select.*from") {
        return 403;
    }
}

Contoh ini menggunakan modul if terbina dalam Nginx untuk menghalang penyerang daripada menggunakan penyataan pilih untuk mendapatkan data daripada pangkalan data Jika ini berlaku, kembali 403 Dilarang Akses .

4. Cegah serangan XSS

Untuk serangan XSS, kami boleh mengukuhkan pengesanan input. Jika kemungkinan serangan XSS dikesan, sambungan boleh diubah hala ke URL selamat atau mesej ralat boleh dikembalikan.

if ($args ~* "<script.*>") {
    return 403;
}

Contoh ini menggunakan modul if terbina dalam Nginx untuk mengesan sama ada terdapat kandungan dengan teg skrip bersarang dalam URL.

5. Cegah serangan CSRF

Apabila menggunakan Nginx, untuk mengelakkan serangan CSRF, anda perlu melarang permintaan daripada tapak luar. Sebagai contoh, anda boleh menambah konfigurasi berikut:

location / {
    if ($http_referer !~ "^https?://$host/") {
        return 403;
    }
}

Contoh ini menggunakan modul if terbina dalam Nginx untuk mengehadkannya kepada hanya menerima permintaan daripada tapak $host Jika terdapat permintaan daripada tapak lain, Nginx akan kembali 403.

6. Cegah kelemahan muat turun fail

Untuk mengelakkan akses kepada fail yang tidak betul, seperti dokumen peribadi, skrip, fail konfigurasi, dll., sila gunakan strategi berikut:

location ~* .(xls|doc|pdf)$ {
    valid_referers none blocked server_names;
    if ($invalid_referer) {
        return 401;
    }
}

Contoh ini Menggunakan modul valid_referers terbina dalam Nginx, apabila permintaan didapati datang dari tapak yang tidak dibenarkan, 401 akan dikembalikan.

7. Larang akses kepada beberapa URL

Dalam projek sebenar, sesetengah URL boleh digunakan oleh penyerang, seperti admin.php, login.php, dsb. Kita hanya boleh melarang akses mereka.

location ~ /(admin|login).php {
    deny all;
}

Konfigurasi contoh ini melarang akses kepada URL yang berakhir dengan admin.php dan login.php.

8. Contoh lengkap

Akhir sekali, berdasarkan konfigurasi di atas, kita boleh mendapatkan contoh lengkap berikut:

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;
        }
    }
}

Di atas adalah panduan untuk menulis dasar keselamatan URL Nginx . Saya harap ia dapat memberikan sedikit bantuan untuk konfigurasi Nginx anda dan meningkatkan keselamatan sistem.

Atas ialah kandungan terperinci Panduan penulisan dasar keselamatan URL Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn