Dengan menanggapi dengan Access-Control-Allow-Origin: *
, sumber daya yang diminta memungkinkan berbagi dengan setiap asal. Ini pada dasarnya berarti bahwa situs apa pun dapat mengirim permintaan XHR ke situs Anda dan mengakses respons server yang tidak akan menjadi masalah jika Anda tidak menerapkan respons CORS ini.
Jadi situs mana pun dapat mengajukan permintaan ke situs Anda atas nama pengunjung mereka dan memproses tanggapannya. Jika Anda menerapkan sesuatu seperti skema otentikasi atau otorisasi yang didasarkan pada sesuatu yang secara otomatis disediakan oleh browser (cookie, sesi berbasis cookie, dll.), Permintaan yang dipicu oleh situs pihak ketiga akan menggunakannya juga.
Ini memang menimbulkan risiko keamanan, terutama jika Anda mengizinkan berbagi sumber daya tidak hanya untuk sumber daya yang dipilih tetapi untuk setiap sumber daya. Dalam konteks ini, Anda harus melihat Kapan aman untuk mengaktifkan CORS? .
Access-Control-Allow-Origin: *
? Tidak akan ada nogin dll, mereka terbuka untuk semua orang?Access-Control-Allow-Origin: *
benar-benar aman untuk ditambahkan ke sumber daya apa pun, kecuali sumber daya tersebut berisi data pribadi yang dilindungi oleh sesuatu selain kredensial standar (cookie, otorisasi dasar, sertifikat klien TLS).Misalnya: Data yang dilindungi oleh cookie aman
Bayangkan
https://example.com/users-private-data
, yang mungkin mengekspos data pribadi tergantung pada status login pengguna. Status ini menggunakan cookie sesi. Anda dapat menambahkan sumber daya ini dengan amanAccess-Control-Allow-Origin: *
, karena header ini hanya mengizinkan akses ke respons jika permintaan dibuat tanpa cookie, dan cookie diperlukan untuk mendapatkan data pribadi. Alhasil, tidak ada data pribadi yang bocor.Misalnya: Data yang dilindungi oleh lokasi / ip / jaringan internal tidak aman (sayangnya umum terjadi pada intranet dan peralatan rumah tangga):
Bayangkan
https://intranet.example.com/company-private-data
, yang mengekspos data perusahaan swasta, tetapi ini hanya dapat diakses jika Anda berada di jaringan wifi perusahaan. Tidak aman menambahkanAccess-Control-Allow-Origin: *
sumber daya ini, karena dilindungi menggunakan sesuatu selain kredensial standar. Jika tidak, skrip yang buruk dapat menggunakan Anda sebagai terowongan ke intranet.Aturan praktis
Bayangkan apa yang akan dilihat pengguna jika mereka mengakses sumber daya di jendela penyamaran. Jika Anda senang semua orang melihat konten ini (termasuk kode sumber yang diterima browser), Anda dapat menambahkannya dengan aman
Access-Control-Allow-Origin: *
.sumber
Access-Control-Allow-Origin: *
hanya mengizinkan permintaan tanpa cookie. Saya telah mengedit jawabannya untuk sedikit menjelaskan.AFAIK, Access-Control-Allow-Origin hanyalah header http yang dikirim dari server ke browser. Membatasi ke alamat tertentu (atau menonaktifkannya) tidak membuat situs Anda lebih aman, misalnya untuk robot. Jika robot menginginkannya, mereka dapat mengabaikan headernya. Browser biasa di luar sana (Explorer, Chrome, dll.) Secara default menerima header. Tetapi aplikasi seperti Postman mengabaikannya begitu saja.
Ujung server tidak benar-benar memeriksa apa 'asal' dari permintaan saat mengembalikan respons. Itu hanya menambahkan header http. Ini adalah browser (ujung klien) yang mengirim permintaan yang memutuskan untuk membaca header kontrol akses dan menindaklanjutinya. Perhatikan bahwa dalam kasus XHR, mungkin menggunakan permintaan 'OPTIONS' khusus untuk meminta header terlebih dahulu.
Jadi, siapa pun dengan kemampuan skrip kreatif dapat dengan mudah mengabaikan keseluruhan header, apa pun yang diatur di dalamnya.
Lihat juga Masalah keamanan yang mungkin terjadi pada pengaturan Access-Control-Allow-Origin .
Sekarang untuk benar-benar menjawab pertanyaan itu
Jika ada yang ingin menyerang Anda, mereka dapat dengan mudah melewati Access-Control-Allow-Origin. Tetapi dengan mengaktifkan '*' Anda memberikan penyerang beberapa 'vektor serangan' lagi untuk dimainkan, seperti, menggunakan browser web biasa yang menghormati header HTTP itu.
sumber
Access-Control-Allow-Origin *
di situs web berbahaya yang menginangi skrip untuk mencuri sandi sangat tidak disarankan :-)192.168.1.1
) dan mengkonfigurasi ulang router Anda untuk memungkinkan serangan. Ia bahkan dapat menggunakan router Anda secara langsung sebagai node DDoS. (Sebagian besar router memiliki halaman uji yang memungkinkan ping atau pemeriksaan server HTTP sederhana. Ini dapat disalahgunakan secara massal.)Berikut adalah 2 contoh yang diposting sebagai komentar, jika karakter pengganti benar-benar bermasalah:
- Brad
- Brad
Saya merasa bahwa komentar ini seharusnya menjadi jawaban, karena menjelaskan masalah dengan contoh kehidupan nyata.
sumber
Dalam skenario di mana server mencoba untuk menonaktifkan CORS sepenuhnya dengan menyetel header di bawah ini.
Access-Control-Allow-Origin: * (memberi tahu browser bahwa server menerima permintaan lintas situs dari ASAL mana pun)
Access-Control-Allow-Credentials: true (memberi tahu browser bahwa permintaan lintas situs dapat mengirim cookie)
Ada keamanan gagal yang diterapkan di browser yang akan menghasilkan kesalahan di bawah ini
Jadi dalam kebanyakan skenario pengaturan 'Access-Control-Allow-Origin'
*
tidak akan menjadi masalah. Namun untuk mengamankan dari serangan, server dapat mempertahankan daftar asal yang diizinkan dan setiap kali server mendapatkan permintaan lintas sumber, ia dapat memvalidasi header ORIGIN terhadap daftar asal yang diizinkan dan kemudian menggemakannya kembali di Access-Control-Allow-Origin header.Karena header ORIGIN tidak dapat diubah dengan javascript yang berjalan di browser, situs berbahaya tidak akan dapat memalsukannya.
sumber