All Products
Search
Document Center

Edge Security Acceleration:Validasi kepatuhan skema API

Last Updated:Apr 22, 2026

Setelah Anda mengunggah skema API, seperti spesifikasi OpenAPI, ESA secara otomatis mencocokkannya dengan API yang Anda kelola. ESA kemudian memvalidasi permintaan masuk terhadap skema tersebut dan menerapkan aksi yang dikonfigurasi terhadap setiap permintaan yang tidak sesuai untuk melindungi API bisnis Anda.

Cara kerja

Anda dapat menggunakan validasi skema untuk API apa pun yang dikelola dalam manajemen API ESA.

  1. Ketika permintaan tiba di node ESA, ESA memeriksa apakah permintaan tersebut ditujukan untuk API yang dikelola:

    • Jika tidak, ESA mengizinkan permintaan tersebut diteruskan ke fitur keamanan lainnya.

    • Jika ya, ESA mencocokkan permintaan tersebut dengan skema API yang sesuai.

  2. ESA memvalidasi permintaan terhadap skema:

    • Jika permintaan tidak sesuai, ESA menerapkan aksi yang dikonfigurasi dan mencatat event tersebut.

    • Jika permintaan sesuai, ESA mengizinkannya diteruskan.

Konfigurasikan validasi skema

Sebelum dapat menggunakan validasi skema, Anda harus mengunggah skema dan mengaktifkan fitur tersebut.

  1. Di Konsol ESA, pilih Websites, lalu klik website target di kolom Website.

  2. Di panel navigasi kiri, pilih Security > API Security.

  3. Di halaman API Security, pilih tab Schema Validation, lalu klik Schema Validation Settings.image

  4. Di halaman pengaturan, klik Upload Schema untuk mengunggah file skema kustom Anda.image

  5. ESA secara otomatis mencocokkan API yang Anda kelola dengan definisi dalam skema yang diunggah. Setelah meninjau hasil pencocokan, klik OK.image

  6. Setelah mengunggah skema, konfigurasikan aksi default untuk permintaan yang tidak sesuai. Kami menyarankan Anda memulai dengan aksi Monitor. Lalu, aktifkan sakelar Status.image

  7. Kembali ke tab Schema Validation untuk melihat hasil validasi skema.image

Analisis permintaan yang tidak sesuai

Setelah mengonfigurasi validasi skema, ESA terus memantau permintaan API. Di tab Schema Validation, klik ikon filter image di bilah alat daftar API dan pilih skema untuk memfilter daftar tersebut. ESA kemudian menampilkan API yang cocok, dan kolom Non-compliant requests menunjukkan jumlah permintaan yang tidak sesuai dalam 24 jam terakhir.image

Permintaan yang tidak sesuai dapat disebabkan oleh masalah berikut:

  • Kesalahan sisi client: Client yang sah mungkin mengirim permintaan yang salah format, seperti format parameter yang tidak tepat (misalnya, mengirim data form ketika JSON diperlukan), parameter yang diperlukan tidak ada, atau ketidaksesuaian tipe (misalnya, mengirim string untuk bidang boolean). Jika hal ini terjadi, tinjau desain antarmuka depan Anda dan tambahkan deteksi kesalahan, prompt pengiriman, serta pengamanan serupa.

  • Serangan berbahaya: Penyerang sering mengirim permintaan yang salah format untuk mencari celah keamanan seperti injeksi dan serangan brute-force. Lonjakan mendadak pada permintaan yang tidak sesuai dapat mengindikasikan adanya serangan yang sedang berlangsung. Jika Anda mencurigai adanya serangan, ubah aksi menjadi Block dan konfigurasikan aturan WAF yang lebih ketat.

Analisis detail permintaan

Untuk menemukan akar penyebab permintaan yang tidak sesuai, Anda dapat memeriksa log sampel di Events atau Security Analytics.

  1. Pertama, identifikasi API yang memiliki jumlah permintaan tidak sesuai yang tidak biasa.image

  2. Pilih fitur pencatatan log yang sesuai berdasarkan aksi yang dikonfigurasi:

    • Aksi adalah None: Karena permintaan ini tidak memicu aksi keamanan, analisislah di Security Analytics.

    • Aksi adalah Monitor atau Block: Karena permintaan ini memicu aksi keamanan, Anda dapat menemukan log terkait lebih mudah di Events.

  3. Bagian ini menggunakan Events sebagai contoh. Di panel navigasi kiri, pilih Security > Events.

    Untuk menggunakan Security Analytics, pilih Security > Security Analytics di panel navigasi kiri.
  4. Di halaman Events, gulir ke bawah ke area Sampling Logs. Filter log yang sesuai dengan aturan API Security. Klik ikon perluas image di sebelah entri log untuk melihat detailnya dan menganalisis permintaan tersebut. Anda juga dapat menggunakan Real-time Log untuk analisis log akses yang lebih mendetail.

Ubah aksi

Anda dapat mengonfigurasi aksi default untuk semua API atau menetapkan aksi khusus untuk API tertentu.

  • Ubah aksi default global: Di tab Schema Validation, klik Change di kolom Default Action dan pilih aksi:

    • Block: Memblokir permintaan yang tidak sesuai dan mencatat event tersebut.

    • Monitor: Mengizinkan permintaan yang tidak sesuai diteruskan dan mencatat event tersebut.

    • None: Tidak melakukan tindakan apa pun.

    image

  • Konfigurasikan aksi untuk API tertentu: Di daftar API pada tab Schema Validation, klik Change Action untuk API yang diinginkan dan pilih aksi:

    • Default: Gunakan aksi default global.

    • Block: Memblokir permintaan yang tidak sesuai dan mencatat event tersebut.

    • Monitor: Mengizinkan permintaan yang tidak sesuai diteruskan dan mencatat event tersebut.

    • None: Tidak melakukan tindakan apa pun.

      image

Analisis API tanpa skema

Setelah berhasil mengunggah file skema, API yang sesuai dengan skema akan secara otomatis ditautkan dengannya. Di tab Schema Validation, di kolom APIs without Schema, klik tombol Filter untuk melihat daftar API tanpa skema.image

Untuk API tanpa skema, ESA tidak dapat menghitung permintaan yang tidak sesuai, sehingga menciptakan celah keamanan potensial. API mungkin tidak memiliki skema karena alasan berikut:

  • Tidak dimasukkan dalam skema: API tersebut tidak termasuk dalam file skema yang Anda unggah. Periksa path API, host, dan metode HTTP di daftar tersebut, lalu perbarui file skema Anda dan unggah kembali.

  • Desain API tidak standar: API yang ditemukan tidak mengikuti praktik desain standar, sehingga tidak dapat dicocokkan dengan skema Anda. Anda mungkin perlu merefaktor API tersebut. Masalah umum meliputi:

    • Path tidak standar: Path API salah. Misalnya, entri paths yang benar adalah /users, tetapi didefinisikan sebagai /user.

    • Penyalahgunaan metode HTTP: Metode tidak mengikuti konvensi semantik. Misalnya, menggunakan metode GET untuk aksi destruktif seperti /users/delete/123 alih-alih DELETE.

    • Penyalahgunaan kode status: Kode status respons API salah. Misalnya, semua respons mengembalikan 200 OK, dan status sebenarnya dikembalikan dalam badan respons, seperti { "responses": "500" }.

    • Struktur I/O membingungkan: Data input atau output salah. Misalnya, bidang email yang seharusnya berada di input justru ditempatkan di output.

Spesifikasi file skema

Tipe dan ukuran

File validasi skema harus dalam format .yml, .yaml, atau .json. Ukuran maksimum file adalah 58 KB. Jika file skema Anda terlalu besar, Anda dapat menggunakan format .json dan mengompres file tersebut secara lokal sebelum mengunggahnya.

Konten skema

Versi

Validasi skema ESA saat ini hanya mendukung versi OpenAPI Specification (OAS) v3.0.x.

Bidang

Bidang yang diperlukan

  • openapi: Versi API, seperti 3.0.0.

  • info: Metadata tentang API, seperti "version": "1.0.0".

  • paths: Harus berisi setidaknya satu path API, seperti /api.

  • servers: Informasi tentang host. Sub-bidang berikut didukung:

    • url: Hanya URL absolut yang didukung, seperti https://api.example.com.

    • variables: ESA tidak mendukung variabel server. Placeholder variabel diabaikan selama penguraian.

Bidang opsional

  • schema: Definisi struktur data. Tipe berikut didukung:

    • int32

    • uint32

    • int64

    • uint64

    • float

    • double

    • boolean

    • email

  • reference: Menggunakan $ref untuk mereferensikan objek yang telah didefinisikan. Referensi eksternal atau relatif tidak didukung.

  • requestBody: Mendefinisikan badan permintaan. Hanya data dengan content-type application/json yang didukung.

Contoh

Berikut ini adalah contoh file skema .json.
{
    "openapi": "3.0.0",
    "info": {
        "title": "example",
        "description": "example",
        "version": "1.0"
    },
    "servers": [
    {
      "url": "https://example1.aliyun.com",
      "description": "example1 url"
    },
    {
      "url": "https://example2.aliyun.com",
      "description": "example2 url"
    }
    ],
    "components": {
        "schemas": {
            "ParamsObject": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "value": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "value"
                ]
            }
        }
    },
    "paths": {
        "/example/{param1}": {
            "get": {
                "operationId": "getexampleById",
                "parameters": [
                    {
                        "name": "param1",
                        "in": "path",
                        "required": true,
                        "description": "id",
                        "schema": {
                            "type": "integer",
                            "format": "int32"
                        }
                    }
                ]
            }
        },
        "/api1": {
            "post": {
                "operationId": "post_api1",
                "summary": "post api1 request",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ParamsObject"
                            }
                        }
                    }
                }
            },
            "get" :{
                "operationId": "get_api1",
                "summary": "get api1 request",
                "parameters": [
                    {
                        "name": "id",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int32"
                        }
                    },
                    {
                        "name": "name",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ]
            }
        }
    }
}