Bagaimana server web menerapkan kebijakan asal-sama?

24

Saya menyelam lebih dalam untuk mengembangkan API RESTful dan sejauh ini bekerja dengan beberapa kerangka kerja yang berbeda untuk mencapai ini. Tentu saja saya telah menjalankan kebijakan asal yang sama, dan sekarang saya bertanya-tanya bagaimana server web (bukan browser web) menegakkannya. Dari apa yang saya mengerti, beberapa penegakan tampaknya terjadi pada akhirnya browser (misalnya, menghormati header Access-Control-Allow-Origin yang diterima dari server). Tapi bagaimana dengan server?

Sebagai contoh, katakanlah server web hosting aplikasi web Javascript yang mengakses API, juga di-host di server itu. Saya berasumsi bahwa server akan memberlakukan kebijakan yang sama-asal --- sehingga hanya javascript yang di-host di server yang akan diizinkan untuk mengakses API. Ini akan mencegah orang lain dari menulis klien javascript untuk API itu dan hosting di situs lain, kan? Jadi, bagaimana server web dapat menghentikan klien jahat yang akan mencoba membuat permintaan AJAX ke titik akhir APInya sementara mengklaim menjalankan javascript yang berasal dari server web yang sama? Apa cara server paling populer (Apache, nginx) melindungi dari serangan semacam ini? Atau apakah pemahaman saya tentang ini entah bagaimana melenceng?

Atau apakah kebijakan lintas asal hanya diberlakukan pada klien?

bb
sumber
pertanyaan yang sangat bagus
Benny

Jawaban:

46

Kebijakan asal yang sama adalah pembatasan sepenuhnya berbasis klien, dan terutama dirancang untuk melindungi pengguna , bukan layanan . Semua atau sebagian besar browser menyertakan opsi baris perintah atau konfigurasi untuk mematikannya. SOP seperti sabuk pengaman di dalam mobil: mereka melindungi pengendara di dalam mobil, tetapi siapa pun dapat dengan bebas memilih untuk tidak menggunakannya. Tentu saja jangan berharap sabuk pengaman seseorang untuk menghentikan mereka keluar dari mobil mereka dan menyerang Anda (atau mengakses layanan Web Anda).

Misalkan saya menulis sebuah program yang mengakses layanan Web Anda. Itu hanya sebuah program yang mengirim pesan TCP yang menyertakan permintaan HTTP. Anda meminta mekanisme sisi server untuk membedakan antara permintaan yang dibuat oleh program saya (yang dapat mengirim apa pun) dan permintaan yang dibuat oleh browser yang memiliki halaman yang diambil dari sumber yang diizinkan. Itu tidak bisa dilakukan; program saya selalu dapat mengirim permintaan yang identik dengan yang dibentuk oleh halaman Web.

Kebijakan asal-sama diciptakan karena mencegah kode dari satu situs web dari mengakses konten yang dibatasi kredensial di situs lain. Permintaan Ajax secara default dikirim dengan cookie autentik apa pun yang diberikan oleh situs target. Misalnya, misalkan saya tidak sengaja memuat http://evil.com/, yang mengirimkan permintaan http://mail.google.com/. Jika SOP tidak ada, dan saya masuk ke Gmail, skrip di evil.comdapat melihat kotak masuk saya. Jika situs di evil.comingin memuat mail.google.comtanpa cookie saya, itu hanya dapat menggunakan server proxy; konten publik mail.google.combukan rahasia (tetapi konten mail.google.comsaat diakses dengan cookie saya adalah rahasia).

apsillers
sumber
7

Kebijakan asal yang sama diberlakukan di sisi klien. Jika peramban mendukung CORS , server dapat mengirim kembali tajuk yang memberi tahu peramban untuk membuat pengecualian terhadap kebijakan asal yang sama. Misalnya, mengirim tajuk

 Access-Control-Allow-Origin: www.example.com

akan memberi tahu browser untuk mengizinkan permintaan lintas asal dari www.example.com.

 Access-Control-Allow-Origin: *

memberitahu browser untuk mengizinkan semua permintaan lintas asal ke sumber daya itu.

Dirk Holsopple
sumber
3

Server web umumnya mencegah serangan semacam ini dengan memeriksa baris (salah ejaan) Refererpada header HTTP, untuk memastikan bahwa permintaan datang dari halaman di situs mereka sendiri. Tidak ada cara yang baik untuk menjaga terhadap klien jahat, tetapi bukan itu cara kerja serangan XSRF.

Klien tidak berbahaya; umumnya pengguna biasa yang telah ditipu oleh pihak ketiga yang berbahaya untuk membuka dokumen yang secara diam-diam membuat permintaan HTTP menggunakan cookie yang disimpan klien. Jadi jika server dapat memverifikasi melalui Refererpermintaan HTTP yang berasal dari gmail.com, dan bukan MyAwesomeWebsite.com, itu dapat mematikan serangan.

Mason Wheeler
sumber
bagaimana jika garis referer dipalsukan secara jahat?
Benny
@ Benny: Itu sangat tidak mungkin. The Referergaris dihasilkan oleh web browser pengguna, dan pengguna adalah korban di sini, tidak penyerang. Dia tidak punya alasan untuk menempa Referer, dan penyerang tidak memiliki kesempatan untuk melakukannya.
Mason Wheeler
1

Bagaimana server web menerapkan kebijakan asal-sama?

Singkatnya, mereka tidak, seperti yang ditunjukkan oleh apsillers dan Dirk .
Salah satu alasan penting adalah bahwa header ACAO melindungi server itu sendiri dari DDOS yang merajalela, - Distributed Denial of Service-serang .

Siapa:

ACAO sebagai header tanggapan HTTP dimaksudkan untuk ditafsirkan oleh klien web, yang beroperasi di bawah asumsi bahwa mayoritas pengguna internet manusia menjelajah web melalui vendor peramban utama yang mematuhi dan menerapkan rancangan W3C yang direkomendasikan . Bagaimanapun, mereka seharusnya mendapatkan manfaat dari internet yang cepat dan dapat diakses.

Bagaimana:

Kalau tidak ada orang, bisa saja menyalin dan menempelkan beberapa baris kode javascript ke situs web berbahaya yang menjalankan loop sederhana, yang membuat permintaan Ajax GET atau POST ke domain asing. Tanpa interaksi pengguna, dan kemampuan untuk multithread.

Itulah sebabnya Anda harus ikut serta untuk mengakses situs asal-silang, melalui header HTTP ACAO . Anda, pengguna, dapat mengakses situs tersebut kapan saja melalui interaksi yang disadari pengguna, yaitu tautan internet. Sama seperti Anda dapat menyalin atau menempelkan konten yang disadari pengguna dari atau ke papan klip Anda, tetapi tidak dengan cara lain - kesampingkan plugin.

Masa depan:

Pada saat itu, perhatikan arah pembuat web-browser dari:

Pembatasan keamanan dapat dibuat dengan menggunakan kombinasi TSL 2/3, ID sesi yang kuat, TANs, otentikasi dua faktor, dll.

'Google' memiliki ini untuk ditampilkan dan katakan tentang DDOS

Terakhir, siapa pun bebas untuk mem -proksi konten web apa pun dan menambahkan header ACAO yang diinginkan untuk mengakses konten lintas situs yang diproksi. Demikian juga, proksi ini kemudian terbuka untuk serangan DDOS, seperti pengaturan ACAO memungkinkannya. Saya sebenarnya tidak tahu tentang satu penawaran layanan publik gratis. Tolong koreksi saya jika saya salah.

Lorenz Lo Sauer
sumber
0

Seperti yang orang lain katakan, itu terserah klien. Tetapi server mungkin perlu berurusan dengan XSS, yang mem-bypass SOP.

Supopse server Anda memungkinkan pengguna untuk mengunggah konten, yang ditampilkan ketika pengguna lain menelusuri situs Anda. Halaman ini adalah contoh yang bagus - Saya baru saja mengunggah konten, dan itu ditampilkan kepada Anda.
Jika konten saya berisi <script>tag, dan server hanya menyalinnya ke HTML yang dihasilkannya, maka skrip yang saya unggah akan berjalan.
Karena skrip ditemukan dalam HTML dari file Anda, skrip ini memiliki semua izin skrip situs Anda. Misalnya, ia dapat meningkatkan jawaban ini. Dan inilah mengapa jawaban ini memiliki begitu banyak upvotes.

Server web yang bagus (seperti, sayangnya, yang digunakan StackExchange), tidak akan membiarkan ini terjadi. Itu dapat menghapus <script>tag, atau menghindarinya, sehingga akan terlihat tetapi tidak dieksekusi (peringatan - jawaban ini jauh dari resep yang dapat diandalkan untuk mencegah XSS).

Jadi sisi klien yang memberlakukan SOP, tetapi dalam beberapa kasus server harus bekerja untuk mencegah mem-bypassnya.

ugoren
sumber