Cara menghentikan penyandian html

Aktifkan atau nonaktifkan tautan URL dan penyandian HTML di kisi

Anda dapat membuat tautan URL dan string penyandian HTML aktif atau tidak aktif saat muncul di kisi

  1. Di Studio, buka sumber berdasarkan tempat Anda membuat kisi (rekaman, metrik, atau proses)
  2. Pilih bidang yang diperlukan. Pada Panel Properti temukan properti Bidang URL dan Enkode HTML dan pilih . Aturan berikut berlaku.
    • Untuk tautan URL. jika properti Bidang URL dipilih, tautan muncul di petak sebagai tautan aktif.

      Cara menghentikan penyandian html

      Jika Anda mengosongkan kotak centang ini, bidang akan muncul dengan tautan URL tidak aktif

      Cara menghentikan penyandian html


    • Untuk string HTML. jika properti HTML Encode dipilih, maka string HTML tidak aktif.

      Cara menghentikan penyandian html


      Jika Anda mengosongkan kotak centang ini, pengodean HTML menjadi aktif

      Cara menghentikan penyandian html


    Catatan Saat Anda mengaktifkan atau menonaktifkan properti Enkode HTML untuk bidang yang berisi string HTML, kami . URL Field property to avoid incorrect display of the HTML strings.

Ini adalah bagian lima dari seri Lab Keamanan GitHub tentang 10 Kontrol Proaktif Teratas OWASP, di mana kami memberikan panduan praktis untuk pengembang dan pengelola OSS dalam meningkatkan kondisi keamanan Anda


Sebagian besar serangan injeksi berasal dari apa yang kami sebut sebagai data yang dirusak. data atau pemformatan tak terduga dalam input dengan maksud untuk menemukan atau mengeksploitasi kerentanan. Dalam posting ini, saya akan membahas cara mempertahankan diri menggunakan panduan dari OWASP Top 10 Proactive Controls C4. Encode dan Escape Data—termasuk “mengapa” dan “apa” dari kontrol tersebut

Pengkodean dan injeksi menurut OWASP

Dari dokumen OWASP tentang kontrol ini

Encoding dan escape adalah teknik defensif yang dimaksudkan untuk menghentikan serangan injeksi

Hingga 2017, daftar 10 Risiko Teratas dari OWASP mencantumkan cross-site scripting (XSS) terpisah dari “injection. Banyak (termasuk saya) yang menganggap XSS sebagai bentuk injeksi. Jadi, mengatakan bahwa pengkodean keluaran mencegah serangan injeksi adalah akurat dalam hal itu

Serangan injeksi, penyandian, dan juru bahasa

Apa perbedaan antara melarikan diri dan penyandian?

Saya akan menggunakan kedua istilah tersebut secara bergantian dalam posting ini. Singkatnya, tujuannya adalah bahwa pelolosan atau penyandian membantu merender input eksternal yang tidak aman menjadi aman dalam konteks yang dapat dieksekusi

Bahaya sebenarnya dari serangan injeksi adalah bahwa mereka biasanya bersifat apa-yang-Anda-lihat-BUKAN-apa-yang-Anda-dapatkan. Dengan menggunakan skema penyandian yang berbeda yang akan sering didekode oleh penerjemah kami dengan "membantu" nanti, penyerang melewati pendekatan daftar tolak sederhana. Saya ingat sekali (di awal hari kesadaran keamanan saya, masih bekerja sebagai insinyur perangkat lunak) mencoba bertahan melawan injeksi SQL (SQLi) dengan mencari perintah yang tidak terduga seperti DROP atau INSERT di mana mereka mungkin tidak diharapkan. Demikian pula, beberapa aplikasi web telah mencari <script> dalam input untuk bertahan melawan XSS. Pendekatan semacam ini rapuh, sulit dipertahankan dari perspektif kode, dan tidak efektif dari perspektif keamanan. Selain itu, pertahanan sebenarnya terhadap SQLi adalah kueri berparameter (yang menyandikan sesuatu untuk Anda, lebih lanjut tentang itu nanti), tetapi mari kita kembali ke penyandian

Pengkodean dapat digunakan dalam serangan maupun pertahanan. Dalam serangan, pengguna jahat mungkin mengirim %3Cscript%3E alih-alih <script> untuk menghindari daftar penolakan yang disederhanakan yang digunakan sebagai pertahanan. Encoding output, yang akan saya bicarakan sebentar lagi, adalah teknik defensif

Dalam kebanyakan kasus, penerjemah yang membantu adalah browser Anda, tetapi bisa juga lingkungan baris perintah atau perangkat lunak lain seperti driver database. Browser, dan karenanya XSS, mewakili permukaan target besar yang pengkodean keluarannya adalah teknik pencegahan. Saya juga akan membahas beberapa contoh lainnya. Mari kita gali XSS terlebih dahulu

XSS dan pengkodean keluaran

Skrip lintas situs (XSS) adalah kerentanan. Saat dieksploitasi, pengguna jahat menyuntikkan JavaScript mereka untuk berjalan di browser Anda dengan cara jahat dan biasanya tanpa sepengetahuan Anda

Pertahanan utama untuk XSS adalah “pengkodean keluaran. " Apa artinya? . Singkatnya, pengkodean keluaran memungkinkan rendering yang aman dari karakter tertentu ke penafsir target

Konteks adalah kuncinya

Konteks sangat penting dalam setiap diskusi tentang XSS, browser, dan penyandian. Di browser, ketika kita berbicara tentang konteks, kita terutama berbicara tentang di mana konten dirender. Ada empat konteks

  • Badan HTML (teks di antara tag)
  • Atribut HTML (teks di dalam tag)
  • JavaScript (konten antara tag <script> dan </script>)
  • Cascading Style Sheets (CSS, konten antara tag INSERT0 dan INSERT1)

Setiap konteks memiliki sistem pengkodeannya sendiri. Artinya, Anda menyandikan untuk JavaScript jika Anda mengeluarkan konten antara INSERT2 tag. Demikian pula, Anda menyandikan atribut HTML antara < dan INSERT4, termasuk nama tag, nama atribut, dan nilai atribut. Enkode untuk badan HTML di antara tag dan gaya di antara INSERT0 tag

Pengodean dengan benar itu sulit

Saran konvensional dan bijak adalah menyandikan data apa pun yang Anda hasilkan dari sumber yang tidak tepercaya (pengguna atau sumber eksternal apa pun) untuk konteks yang tepat (lihat di atas). Ini banyak yang harus dilakukan dengan benar

Saya pernah melakukan pelatihan untuk grup yang memiliki temuan XSS di sebuah aplikasi. Kami menjeda pelatihan untuk mempelajari aplikasi dan kode yang terpengaruh untuk melakukan latihan langsung. Saat kami memeriksa INSERT6 dan komentar, temuan XSS diperkenalkan karena perubahan dalam konteks penyandian. Itu dikodekan untuk JavaScript tetapi dihasilkan menjadi atribut HTML. Itu telah dikodekan untuk konteks yang berbeda. Konteks pengkodean yang salah membuka aplikasi hingga kerentanan. Ini adalah kesalahan yang mudah dilakukan dengan dampak yang berpotensi tinggi

Bang untuk uang Anda untuk pengembang aplikasi

Jadi, ketika Anda ingin bertahan melawan sesuatu yang sulit dan berpotensi meluas seperti XSS dengan pengkodean, Anda perlu pengkodean itu otomatis. Itu harus menjadi sesuatu yang tidak perlu Anda pikirkan terus-menerus. OWASP mencantumkannya sebagai dalam dokumen pencegahan skrip lintas situs mereka. Saya sarankan mulai dari sini. Pilih mesin template/output Anda sedemikian rupa sehingga penyandian terjadi secara otomatis untuk konteks yang tepat. Ini berarti perlu diganti atau dinonaktifkan secara eksplisit untuk membuatnya tidak aman

Kerangka kerja penyandian otomatis/mesin templat

Dokumen OWASP mengenai kontrol ini juga mengatakan

Pengkodean output paling baik diterapkan tepat sebelum konten diteruskan ke penafsir target

Di sinilah kerangka kerja dan mesin template berperan. Untuk membuat hidup anti-XSS Anda lebih mudah, gunakan kerangka kerja yang secara default melakukan penyandian keluaran dengan aman (yang akan dilakukannya saat meneruskan konten ke penafsir target). Ini beberapa

  • BereaksiJS
  • AngularJS (Lihat halaman keamanan Angular untuk detail lebih lanjut. )
  • Setang
  • LiquidJS
  • Rel
  • Proyek Java Encoder (Dari OWASP. Bukan kerangka kerja atau mesin templat yang sebenarnya, tetapi pustaka yang ditulis dengan baik untuk membantu memerangi XSS. )
  • Net (Umumnya bekerja dengan baik secara default, tetapi yang terbaik adalah membaca dokumen keamanan mereka tentang topik tersebut. )

Apakah ini semua dijamin 100% bebas XSS selamanya? . Daftar ini tidak lengkap. Jika Anda ingin menggunakan sesuatu yang tidak ada di dalamnya, luangkan waktu untuk meneliti dan bahkan mungkin bertanya-tanya apakah mesin templating atau perpustakaan itu lolos otomatis atau melakukan penyandian keluaran sesuai dengan konteks secara default

Jangan melarikan diri melarikan diri

Saat Anda menggunakan pustaka atau kerangka kerja yang menangani penyandian keluaran (atau pelolosan) untuk Anda secara default, jangan abaikan itu. Beberapa kerangka kerja membuatnya sangat jelas bahwa Anda melakukannya (seperti Bereaksi dan INSERT7). Lainnya lebih ambigu, seperti Rails dengan INSERT8. Jika Anda tidak yakin, baca dokumennya

Skenario enkode atau pelolosan lainnya

XSS dan browser adalah contoh utama penggunaan pengkodean secara defensif. Namun, 'ujung depan' aplikasi web bukan satu-satunya tempat Anda harus menggunakan penyandian untuk menjaga keamanan aplikasi Anda

Seperti yang saya sebutkan sebelumnya, menggunakan kueri berparameter adalah bentuk penyandian/lolos dari masukan yang berpotensi berbahaya yang dimaksudkan untuk menyebabkan injeksi SQL. Penjelasan bagus yang ditawarkan kepada saya adalah bahwa input berbahaya dapat digunakan untuk mencampur bidang kontrol (kueri) dan bidang data (seperti nilai dalam klausa INSERT9 yang ingin Anda gunakan dari pengguna). Ini memberi pengguna kontrol atas bidang kontrol, yang memungkinkan mereka untuk merestrukturisasi atau mengatur ulang kueri. Dalam kasus SQLi, ini paling sering dilakukan dengan memperkenalkan <script>0 yang tidak terduga untuk menyeimbangkan bidang tersebut. Kueri berparameter secara otomatis menyandikan dengan benar untuk Anda, meniadakan skenario pencampuran kontrol dan bidang data. Pustaka pemetaan objek-relasional (ORM) melakukan ini secara default dalam banyak kasus juga

Dalam injeksi perintah, karakter baris baru yang tidak terduga (<script>1) dapat diperkenalkan untuk mem-bypass validasi rapuh. Normalisasikan atau enkode input untuk memastikannya mewakili satu baris sebelum memvalidasinya. Periksa referensi ekspresi reguler untuk bahasa Anda untuk memastikan Anda menggunakan jangkar baris tunggal dalam validasi Anda. Secara umum, pengkodean/normalisasi semacam ini adalah ide yang bagus untuk kualitas kode

Tipuan sebagai penyandian

Akan ada saatnya (yaitu ketika mencoba mencegah injeksi perintah) di mana Anda tidak dapat menyandikan (atau regex) dengan cara Anda menuju penggunaan yang aman. Dalam kasus seperti itu, pertimbangkan tipuan atau abstraksi. Apa ini biasanya berarti bahwa Anda menawarkan nilai yang telah ditentukan sebelumnya (seperti <script>2,<script>3,<script>4,<script>5) yang memetakan ke nilai yang telah ditentukan lainnya (mungkin nama file atau jalur, misalnya) tempat Anda memproses input

Gesekan yang bagus

Pengodean dan pelolosan selain validasi akan selalu menambah hambatan pada aplikasi atau layanan Anda, tetapi tidak semua hambatan itu buruk. Dalam hal pencegahan serangan, anggap saja seperti rem pada mobil. itulah yang memungkinkan Anda untuk pergi dengan cepat di sisa waktu


Lihat seri OWASP Top 10 Proactive Controls lainnya, atau ikuti GitHub Security Lab di Twitter untuk penelitian keamanan terbaru

Bagaimana cara menonaktifkan penyandian URL?

Dengan menggunakan kueri permintaan menggunakan $request->getQuery() lalu $query->useUrlEncoding(false); Anda dapat menonaktifkan UrlEncoding.

Pengkodean mana yang terbaik untuk HTML?

Spesifikasi HTML5 mendorong pengembang untuk menggunakan rangkaian karakter UTF-8 . Panjang karakter bisa 1-4 byte dalam Standar Pengkodean UTF-8. Ini juga merupakan penyandian yang paling disukai untuk email dan halaman web. Pengkodean karakter dapat ditentukan dalam tag meta di HTML.