Bagaimana cara mengizinkan pengguna untuk memasukkan HTML ke dalam bidang tertentu menggunakan ASP.net MVC.
Saya memiliki formulir panjang dengan banyak bidang yang dipetakan ke objek kompleks ini di pengontrol.
Saya ingin membuat satu bidang (deskripsi) memungkinkan HTML yang akan saya bentuk sebelumnya pada sanitasi saya di lain waktu.
Jawaban:
Tambahkan atribut berikut tindakan (post) di pengontrol yang Anda ingin izinkan HTML untuk:
Edit: Sesuai komentar Charlino :
Di web.config Anda, atur mode validasi yang digunakan. Lihat MSDN :
Edit September 2014: Sesuai sprinter, 252 komentar:
Anda sekarang harus menggunakan
[AllowHtml]
atribut tersebut. Lihat di bawah dari MSDN :sumber
<httpRuntime requestValidationMode="2.0" />
di file web.config Anda.Bagaimana dengan
[AllowHtml]
atribut di atas properti?sumber
MetadataTypeAttribute
dan lebih disukai karena hanya mengizinkan HTML pada bidang individu daripada seluruh objek.Tambahkan ke model:
Dan untuk properti Anda
Kode ini dari poin saya cara terbaik menghindari kesalahan ini. Jika Anda menggunakan editor HTML Anda tidak akan mengalami masalah keamanan karena sudah dibatasi.
sumber
Menambahkan
[AllowHtml]
pada properti tertentu adalah solusi yang disarankan karena ada banyak blog dan komentar yang menyarankan untuk menurunkan tingkat keamanan, yang seharusnya tidak dapat diterima.Dengan menambahkan itu, kerangka kerja MVC akan memungkinkan Kontroler untuk dipukul dan kode dalam kontroler itu akan dieksekusi.
Namun, ini tergantung pada kode Anda, filter, dll., Bagaimana respons dibuat dan apakah ada validasi lebih lanjut yang mungkin memicu kesalahan serupa lainnya.
Bagaimanapun, menambahkan
[AllowHtml]
atribut adalah jawaban yang tepat, karena memungkinkan html untuk dideserialisasi di pengontrol. Contoh di viewmodel Anda:sumber
Saya menghadapi masalah yang sama meskipun saya menambahkan
[System.Web.Mvc.AllowHtml]
ke properti terkait seperti yang dijelaskan dalam beberapa jawaban.Dalam kasus saya, saya memiliki
UnhandledExceptionFilter
kelas yang mengakses objek Permintaan sebelum validasi MVC berlangsung (dan karena itu AllowHtml tidak berpengaruh) dan akses ini menimbulkan a[HttpRequestValidationException] A potentially dangerous Request.Form value was detected from the client
.Ini berarti, mengakses properti tertentu dari objek Request secara implisit mengaktifkan validasi (dalam kasus saya ini adalah
Params
propertinya).Solusi untuk mencegah validasi didokumentasikan di MSDN
Oleh karena itu, jika Anda memiliki kode seperti ini
ubah menjadi
atau cukup gunakan
Form
properti yang tampaknya tidak mengaktifkan validasisumber
Jika Anda perlu mengizinkan masukan html untuk parameter metode tindakan (berlawanan dengan "properti model"), tidak ada cara bawaan untuk melakukannya, tetapi Anda dapat dengan mudah melakukannya menggunakan pengikat model khusus:
Kode AllowHtmlBinder:
Temukan source code lengkapnya dan penjelasannya di postingan blog saya: https://www.jitbit.com/alexblog/273-aspnet-mvc-allowing-html-for-particular-action-parameters/
sumber
URL Encoding data bekerja dengan baik untuk saya
Sebagai contoh
var data = '<b> Halo </b>'
Dalam panggilan browser encodeURIComponent (data) sebelum posting
Pada panggilan Server HttpUtility.UrlDecode (accept_data) untuk memecahkan kode
Dengan begitu Anda dapat mengontrol dengan tepat area bidang mana yang diizinkan untuk memiliki html
sumber
Saya telah menghadapi masalah ini selama pengembangan situs E-Commerce menggunakan NopCommerce, saya mendapatkan solusi ini dengan 3 cara berbeda seperti jawaban sebelumnya. Tetapi menurut struktur NopCommerce, saya tidak menemukan ketiganya sekaligus. Saya baru saja melihat bahwa di sana mereka hanya menggunakan
[AllowHtml]
dan berfungsi dengan baik kecuali ada masalah. Seperti yang ditanyakan sebelumnya pertanyaan yangSecara pribadi saya tidak lebih suka
[ValidateInput(false)]
karena saya melewatkan pemeriksaan entitas model total, yang tidak aman. Tetapi jika ada yang baru saja menulis, lihat di sinimaka itu hanya melewatkan satu properti saja, dan hanya mengizinkan hanya properti tertentu dan memeriksa hampir semua entitas lainnya. Oleh karena itu tampaknya lebih disukai daripada milik saya.
sumber
Dalam kasus saya, atribut AllowHtml tidak berfungsi saat digabungkan dengan filter tindakan OutputCache. Jawaban ini memecahkan masalah saya. Semoga ini bisa membantu seseorang.
sumber
Anda Dapat Menggunakan
[AllowHtml]
Untuk Proyek Anda Sebagai ContohUntuk Menggunakan Kode Ini Ke Perpustakaan Kelas Anda Menginstal Paket Ini
Setelah Gunakan Ini
using
sumber
Sayangnya, tidak ada jawaban di sini yang berhasil untuk saya.
Saya akhirnya menggunakan Custom Model Binding dan menggunakan Sanitizer pihak ketiga.
Lihat pertanyaan yang saya jawab sendiri di sini .
sumber