XSS tanpa tag HTML

Apakah mungkin melakukan serangan XSS jika input saya tidak mengizinkan karakter ‹ dan >?

Example: I enter <script>alert('this');</script> text

Tapi kalau saya hapus ‹ dan > skripnya bukan teks:

I enter script alert('this'); script text

person VMOrtega    schedule 14.03.2014    source sumber
comment
Bagaimana masukan pengguna diberikan? AKA, mana kode yang mencetaknya?   -  person Jon Newmuis    schedule 14.03.2014
comment
Input pengguna ditampilkan sebagai teks biasa (tidak di-escape), menghapus karakter ‹ dan ›   -  person VMOrtega    schedule 14.03.2014
comment
Dari atas kepala saya pasti masih ada kemungkinan XSS berkode UTF-7. Maka itu tergantung pada konteks rendering teks (yaitu apakah hanya dalam tag ‹body›, atau dalam konteks yang lebih spesifik misalnya textarea, atau dalam tag html dan seterusnya)   -  person cyber-guard    schedule 14.03.2014


Jawaban (2)


Ya, itu masih mungkin terjadi.

misalnya Katakanlah situs Anda memasukkan masukan pengguna ke lokasi berikut

<img src="http://example.com/img.jpg" alt="USER-INPUT" />

Jika USER-INPUT adalah " ONLOAD="alert('xss'), ini akan dirender

<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />

Tidak diperlukan tanda kurung sudut.

Lihat juga Aturan Encoding Minimal Eksperimental OWASP XSS.

Untuk isi HTML:

Pengkodean Entitas HTML ‹ &

tentukan charset di metatag untuk menghindari UTF7 XSS

Untuk badan XHTML:

Pengkodean Entitas HTML ‹ & ›

batasi masukan ke rangkaian karakter http://www.w3.org/TR/2008/REC-xml-20081126/#charsets

Jadi di dalam tubuh Anda dapat lolos hanya dengan menyandikan (atau menghapus) subset karakter yang biasanya disarankan untuk mencegah XSS. Namun, Anda tidak dapat melakukan ini dalam atribut - XSS (Cross Site Scripting) secara lengkap ) Lembar Cheat Pencegahan merekomendasikan hal berikut, dan mereka tidak memiliki alternatif minimal:

Kecuali karakter alfanumerik, pisahkan semua karakter dengan format Entitas HTML &#xHH;, termasuk spasi. (HH = Nilai Hex)

Tujuan utamanya adalah untuk mencakup tiga jenis cara menentukan nilai atribut:

  • Tidak dikutip
  • Kutipan tunggal
  • Dikutip ganda

Pengkodean sedemikian rupa akan mencegah XSS dalam nilai atribut dalam ketiga kasus.

Berhati-hatilah juga karena serangan UTF-7 tidak memerlukan karakter braket sudut. Namun, kecuali rangkaian karakter secara eksplisit disetel ke UTF-7, jenis serangan ini tidak mungkin dilakukan di browser modern .

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-

Berhati-hatilah juga terhadap atribut yang mengizinkan URL seperti href dan pastikan setiap masukan pengguna adalah URL web yang valid. Menggunakan perpustakaan yang memiliki reputasi baik untuk memvalidasi URL sangat disarankan menggunakan pendekatan daftar yang diizinkan (misalnya jika protokol bukan HTTPS maka tolak). Mencoba memblokir urutan seperti javascript: tidaklah cukup.

person SilverlightFox    schedule 15.03.2014

Jika masukan yang diberikan pengguna dicetak di dalam atribut HTML, Anda juga harus menghindari tanda kutip atau masukan Anda akan rentan seperti ini:

" onload="javascript-code" foobar="

Anda juga harus menghindari karakter ampersand karena biasanya karakter tersebut perlu dikodekan di dalam dokumen HTML dan dapat merusak tata letak Anda.

Jadi, Anda harus memperhatikan karakter berikut: ‹ > & ' "

Namun Anda tidak boleh menghapusnya sepenuhnya tetapi menggantinya dengan kode HTML yang benar yaitu '

person wonce    schedule 14.03.2014