it-swarm-id.com

Mengapa kebijakan Asal yang sama begitu penting?

Saya tidak bisa benar-benar memahami apa --- domain Asal yang sama artinya. Saya tahu itu berarti bahwa ketika mendapatkan sumber daya dari domain lain (katakan file JS) itu akan berjalan dari konteks domain yang menyajikannya (seperti kode Google Analytics), yang berarti tidak dapat memodifikasi data atau membaca data pada domain yang "termasuk sumber daya".

Jadi jika domain a.com sedang menyematkan file js dari google.com dalam sumbernya, bahwa js akan berjalan darigoogle.com dan tidak dapat mengakses DOM\cookies\elemen lain di a.com -- Apakah saya benar?

Berikut adalah definisi untuk kebijakan Asal yang sama yang tidak dapat saya pahami:

Kebijakan Origin-sama adalah mekanisme kunci yang diterapkan dalam browser yang dirancang untuk menjaga konten yang berasal dari asal yang berbeda sehingga tidak saling mengganggu. Pada dasarnya, konten yang diterima dari satu situs web diizinkan untuk membaca dan mengubah konten lain yang diterima dari situs yang sama tetapi tidak diizinkan untuk mengakses konten yang diterima dari situs lain.

Apa maksudnya itu? Bisakah Anda memberi saya contoh nyata?

Pertanyaan lain adalah: apa tujuan header Asal dan bagaimana permintaan lintas domain masih ada? Mengapa itu tidak mempengaruhi keamanan atau kebijakan Origin yang sama?

143
YSY

Mengapa kebijakan Asal yang sama penting?

Misalnya Anda masuk ke Facebook dan mengunjungi situs web berbahaya di tab peramban lain. Tanpa kebijakan Asal yang sama, JavaScript di situs web itu dapat melakukan apa saja ke akun Facebook yang Anda boleh lakukan. Misalnya membaca pesan pribadi, memposting pembaruan status, menganalisis pohon HTML DOM setelah Anda memasukkan kata sandi sebelum mengirimkan formulir.

Tapi tentu saja Facebook ingin menggunakan JavaScript untuk meningkatkan pengalaman pengguna. Jadi penting bahwa browser dapat mendeteksi bahwa JavaScript ini dipercaya untuk mengakses sumber daya Facebook. Di situlah kebijakan Origin yang sama mulai berlaku: Jika JavaScript disertakan dari halaman HTML di facebook.com, ia dapat mengakses sumber daya facebook.com.

Sekarang gantilah Facebook dengan situs web perbankan online Anda, dan akan jelas bahwa ini adalah masalah.

Apa asalnya?

Saya benar-benar tidak dapat sepenuhnya memahami apa arti Origin domain yang sama. Saya tahu itu berarti bahwa ketika mendapatkan sumber daya dari domain lain (katakan file JS) itu akan berjalan dari konteks domain yang menyajikannya (seperti kode analitik google), yang berarti tidak dapat memodifikasi data atau membaca data pada domain yang "termasuk sumber daya".

Ini tidak benar: Asal file JavaScript ditentukan oleh domain halaman HTML yang menyertakannya. Jadi jika Anda memasukkan kode Google Analytics dengan tag <script>, ia dapat melakukan apa saja ke situs web Anda tetapi tidak memiliki izin Asal yang sama di situs web Google.

Bagaimana cara kerja komunikasi lintas domain?

Kebijakan Asal yang sama tidak diberlakukan untuk semua permintaan. Antara lain <script> - dan <img> -tags dapat mengambil sumber daya dari domain apa pun. Mengeposkan formulir dan menautkan ke domain lain juga dimungkinkan. Frame dan iframe cara menampilkan informasi dari domain lain tetapi interaksi dengan konten itu terbatas.

Ada beberapa pendekatan untuk memungkinkan panggilan XMLHttpRequest (ajax) ke domain lain dengan cara yang aman, tetapi mereka tidak didukung dengan baik oleh browser umum. Cara umum untuk mengaktifkan komunikasi dengan domain lain adalah JSONP :

Ini didasarkan pada tag <script>. Informasi, yang akan dikirim ke domain lain, dikodekan dalam URL sebagai parameter. JavaScript yang dikembalikan terdiri dari panggilan fungsi dengan informasi yang diminta sebagai parameter:

<script type="text/javascript" src="http://example.com/
     ?some-variable=some-data&jsonp=parseResponse">
</script>

JavaScript yang dihasilkan secara dinamis dari example.com mungkin terlihat seperti:

parseResponse({"variable": "value", "variable2": "value2"})

Apa itu Cross Site Scripting?

Cross Site Scripting adalah kerentanan yang memungkinkan penyerang menyuntikkan kode JavaScript ke situs web, sehingga berasal dari serangan situs web dari sudut pandang browser.

Ini dapat terjadi jika input pengguna tidak cukup bersih. Misalnya fungsi pencarian dapat menampilkan string "Hasil pencarian Anda untuk [input pengguna]". Jika [userinput] tidak lolos, penyerang dapat mencari:

<script>alert(document.cookie)</script>

Peramban tidak memiliki cara untuk mendeteksi bahwa kode ini tidak disediakan oleh pemilik situs web, sehingga ia akan menjalankannya. Saat ini scripting lintas situs adalah masalah besar, sehingga ada pekerjaan yang dilakukan untuk mencegah kerentanan ini. Yang paling menonjol adalah pendekatan Kebijakan Keamanan Konten .

122

Apa maksudnya itu? Bisakah Anda memberi saya contoh nyata?

Contoh serangan 1: Pemalsuan Permintaan Lintas Situs (CSRF) dengan formulir HTML

Di halaman pada evil.com penyerang telah meletakkan:

<form method="post" action="http://bank.com/trasfer">
    <input type="hidden" name="to" value="ciro">
    <input type="hidden" name="ammount" value="100000000">
    <input type="submit" value="CLICK TO CLAIM YOUR PRIZE!!!">
</form>

Tanpa langkah-langkah keamanan lebih lanjut, ini akan:

  • permintaan itu dikirim. The SOP tidak melarang permintaan ini dikirim.
  • itu termasuk cookie otentikasi dari bank.com yang masuk Anda

Ini adalah pola token sinkronisasi, sendirian, bahkan tanpa SOP, mencegah ini berfungsi.

Pola token sinkronisasi

Untuk setiap formulir di bank.com, pengembang membuat urutan acak satu kali sebagai parameter tersembunyi, dan hanya menerima permintaan jika server mendapatkan parameter.

E.g., Pembantu HTML Rails secara otomatis menambahkan authenticity_token parameter ke HTML, sehingga bentuk yang sah akan terlihat seperti:

<form action="http://bank.com/transfer" method="post">
  <p><input type="hidden" name="authenticity_token"
            value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" ></p>
  <p><input type="hidden" name="to"      value="ciro"></p>
  <p><input type="hidden" name="ammount" value="100000000"></p>
  <p><button type="submit">Send 100000000$ to Ciro.</button></p>
</form>

seperti yang disebutkan di: https://stackoverflow.com/questions/941594/understanding-the-Rails-authenticity-token/26895980#2689598

Jadi jika evil.com membuat permintaan satu posting, ia tidak akan pernah menebak token itu, dan server akan menolak transaksi!

Lihat juga: pola token sinkronisasi di OWASP .

Contoh serangan 2: Pemalsuan Permintaan Lintas Situs (CSRF) dengan JavaScript AJAX

Tapi kemudian, apa yang mencegah evil.com dari membuat 2 permintaan dengan JavaScript, seperti yang dilakukan browser yang sah:

  1. XHR DAPATKAN untuk token
  2. XHR POST berisi token yang baik)

jadi evil.com akan mencoba sesuatu seperti ini (jQuery karena malas):

$.get('http://bank.com/transfer')
// Parse HTML reply and extract token.
$.post('http://bank.com/transfer', {
  to: 'ciro',
  ammount: '100000000',
  authenticity_token: extracted_token
})

Ini adalah tempat SOP ikut bermain. Meskipun $.get dan $.post benar-benar mengirim permintaan yang diautentikasi seperti halnya formulir HTML, peramban pengirim mencegah kode JavaScript untuk membaca kembali balasan HTML, karena permintaan tersebut dikirim ke domain terpisah!

Konsol pengembang Chromium menunjukkan kesalahan untuk jenisnya:

Akses ke XMLHttpRequest di ' http://bank.com ' from Origin ' http://evil.com ' telah diblokir oleh kebijakan CORS: Tidak ada 'Access-Control Header-Allow-Origin hadir pada sumber yang diminta.

yang telah ditanyakan di: https://stackoverflow.com/questions/20035101/why-does-my-javascript-code-get-a-no-access-control-allow-Origin-header-is- pr

Mengapa tidak mengirim cookie permintaan silang saja

Bagaimana jika implementasi memiliki aturan seperti: "izinkan permintaan apa pun, tetapi hanya kirimkan cookie pada domain saat ini XHR"? Bukankah itu lebih sederhana?

Tetapi itu masih memungkinkan untuk jenis serangan lain: ketika otentikasi didasarkan bukan pada cookie, tetapi pada sumber (IP) dari permintaan!

Misalnya, Anda berada di intranet perusahaan Anda dan dari sana Anda dapat mengakses server internal, yang tidak terlihat dari luar dan menyajikan data rahasia.

Apakah semua permintaan lintas-Negara dilarang?

Bahkan melupakan CORS, no , kami melakukannya setiap hari!

Dari MDN :

  • Penulisan Silang Asal biasanya diizinkan: tautan, pengalihan, dan pengiriman formulir.

    [Komentar saya]: mis., Ketika Anda mengeklik tautan, Anda sering diharapkan masuk ke situs web, dan itu mengharuskan Anda membuat permintaan GET terautentikasi yang mengembalikan halaman baru.

  • Penyisipan Lintas-Asal biasanya diizinkan: gambar, CSS eksternal, dan Javascript, iframe.

  • Pembacaan Cross-Origin biasanya tidak diizinkan: XHR (contoh di atas), iframe baca.

    Namun, akses baca sering dibocorkan dengan menanamkan. Misalnya, Anda dapat membaca lebar dan tinggi gambar yang disematkan, tindakan skrip yang disematkan, atau ketersediaan sumber daya yang disematkan (dan dengan demikian mungkin jika pengguna masuk atau tidak pada waktu tertentu domain)

Secara khusus, dimungkinkan untuk menggunakan formulir di evil.com yang membuat POST permintaan terotentikasi menjadi bank.com. Inilah sebabnya mengapa SOP saja tidak cukup: token sinkronisasi juga diperlukan.

Lihat juga: CSRF di OSWAP .

Pendekatan pencegahan lainnya

Jangan khawatir. Saya merasa sulit untuk membungkus kepala saya juga.

Ternyata secara teori Google Analytics dapat melakukan apa saja yang mereka inginkan kepada pengguna Anda. (<script> tag buat pengecualian untuk batasan kebijakan Origin-sama)

Itulah salah satu alasan terbesar XSS serangan adalah Bad Thing ™ dan satu alasan Mozilla dirancang Kebijakan Keamanan Konten yang sekarang - dalam perjalanannya menjadi standar . (Penerapan HTML5 --- WebKit iframe sandbox atribut juga dapat membantu)

Karena mereka tidak bisa lolos dari pemecahan kompatibilitas, kebijakan Origin-sama adalah tentang mencegah hal-hal seperti <iframe> dan XMLHttpRequest dari trik seperti menggunakan cookie "Remember Me" Anda atau dialog login berbohong untuk mengakses akun Anda. (The X-Frame-Options header memungkinkan Anda untuk mengunci frame lebih jauh untuk melindungi terhadap hal-hal seperti Clickjacking .)

Header Origin digunakan oleh mekanisme yang bernama "Berbagi Sumberdaya Lintas-Asal" yang memungkinkan situs untuk memberikan pengecualian terbatas pada kebijakan Origin-sama untuk interaksi lintas-situs yang aman. (didukung sepenuhnya dalam semua browser saat ini kecuali Opera dan Internet Explorer dan sebagian di IE8 + menggunakan objek XDomainRequest eksklusif yang menghilangkan cookie)

Pada dasarnya, ketika Anda mencoba membuat XMLHttpRequest ke domain yang berbeda, browser akan melakukannya salah satu dari dua hal :

  1. Jika permintaan GET atau POST memenuhi batas-batas tertentu (yang telah ditentukan oleh pembuat standar untuk tidak menambah risiko tambahan untuk CSRF serangan) maka browser baru saja melewati permintaan.

  2. Kalau tidak, ia melakukan apa yang disebut "permintaan preflighted", di mana ia pertama kali mengirim permintaan OPTIONS dan hanya melakukan apa yang Anda minta jika cek lulus untuk permintaan OPTIONS.

Dalam kedua kasus tersebut, browser menambahkan header Origin yang memberi tahu situs target siapa yang menelepon. (Ini seperti header Referer, tetapi diperlukan dan lebih khusus ditentukan untuk memastikan keamanan yang tepat)

Server di sisi penerima (yang sangat bergantung pada kebijakan Origin-sama untuk perlindungan) kemudian dapat mengotorisasi permintaan dengan memasukkan Access-Control-Allow-Origin tajuk yang berisi * atau nilai header Origin permintaan.

Jika tidak, browser hanya membuang respons dan mengembalikan kesalahan ke Javascript callback. MDN menjelaskan dengan sangat detail (1)(2) pada apa yang terjadi di bawah tenda di kedua skenario serta apa header lainnya yang dapat diatur oleh sistem target untuk lebih membuat rileks. keamanan secara terkendali. (mis. Mengizinkan akses ke tajuk HTTP khusus yang Anda atur)

GET permintaan dan subset yang diizinkan dari POST permintaan sudah dapat digunakan untuk serangan CSRF melalui mekanisme lain kecuali aplikasi web target dilindungi dengan benar, jadi diputuskan bahwa tidak ada manfaat untuk menggandakan jumlah permintaan HTTP yang terlibat dalam layanan pengoperasian seperti Perpustakaan Font Google.

19
ssokolow

Sebenarnya dalam kasus ini, Skrip analitik Asal Google adalah a.com

Kutipan dari JavaScript: The Definitive Guide :

Penting untuk dipahami bahwa Origin of the Script itu sendiri tidak relevan dengan kebijakan-Origin yang sama: yang penting adalah Origin dari dokumen di mana skrip tersebut tertanam.

1
nandin