Saya memiliki pengaturan titik akhir API Gateway yang menggunakan fungsi Lambda untuk menyimpan URL di DynamoDB. Ketika saya POST pesan dengan ini di badan

"videoURL": "www.youtube.com/watch?v=cgpvCVkrV6M"

Titik akhir berfungsi dengan baik. Ini mengembalikan 200 dan catatan DynamoDB diperbarui. Namun, ketika saya POST ini

"videoURL": "https://www.youtube.com/watch?v=cgpvCVkrV6M"

Titik akhir mengembalikan respons 403 Terlarang dan catatan DB tidak diperbarui.

Ketika saya menguji di dalam API Gateway, string "https://" diterima.

Saya juga memiliki Kunci API, Paket Penggunaan, Sertifikat Klien, dan CORS Diaktifkan (untuk pengujian lokal). Saya tidak berpikir semua ini adalah penyebab masalah saya.

Adakah yang bisa menebak mengapa string "https://" menyebabkan masalah?

0
Amos Long 20 November 2020, 00:47

1 menjawab

Jawaban Terbaik

Masalahnya ada di Web Application Firewall (WAF) saya. Saat membuat firewall, saya menambahkan koleksi AWS-AWSManagedRulesCommonRuleSet. Menurut dokumentasi kumpulan aturan ini , salah satu aturannya adalah:

GenericRFI_BODY - Inspects the values of the request body and blocks requests attempting to exploit RFI (Remote File Inclusion) in web applications. Examples include patterns like ://.

Menonaktifkan aturan ini memecahkan masalah saya. Saya sekarang dapat berhasil mengirim dan menyimpan "https://" di database saya.

Namun, aturan ini mewakili praktik terbaik (atau setidaknya praktik yang baik), dan tidak boleh dinonaktifkan tanpa mempertimbangkan risikonya. Dengan menonaktifkan aturan ini, saya membuat titik akhir saya rentan terhadap serangan Penyertaan File Jarak Jauh. Karena saya memiliki akses ke titik akhir dan definisi fungsi Lambda, saya dapat membagi input URL saya menjadi dua bidang ("https" dan "www.youtube...") dan tetap mengaktifkan aturan. Bagi siapa pun yang mengalami masalah ini, Anda harus mempertimbangkan kemudahan vs. risiko dari setiap pendekatan.

0
Amos Long 21 November 2020, 18:36