Seperti yang kita ketahui sekarang, serangan XSS berbahaya dan sangat mudah dilakukan . Berbagai kerangka membuatnya mudah untuk menyandikan HTML, seperti ASP.NET MVC tidak:
<%= Html.Encode("string"); %>
Tetapi apa yang terjadi ketika klien Anda mengharuskan mereka untuk dapat mengunggah konten mereka langsung dari dokumen Microsoft Word?
Berikut skenarionya: Orang-orang dapat menyalin dan menempelkan konten dari Microsoft word ke editor WYSIWYG (dalam hal ini tinyMCE ), dan kemudian informasi tersebut diposting ke halaman web.
Situs web bersifat publik, tetapi hanya anggota organisasi yang akan memiliki akses untuk mengirim informasi ke laman web.
Bagaimana cara menangani persyaratan ini dengan cara yang aman? Saat ini tidak ada pengecekan yang dilakukan atas apa yang diposkan klien (karena hanya pengguna 'tepercaya' yang dapat memposting), tetapi saya tidak terlalu senang dengan itu dan ingin menguncinya lebih lanjut jika seandainya akun diretas.
Satu-satunya metode konseptual yang saya ketahui memenuhi persyaratan ini adalah dengan memasukkan tag HTML daftar putih dan membiarkannya melewatinya . Apakah ada cara lain? Jika tidak, Apa cara aman untuk membiarkan pengguna menyimpan input dalam Database dalam bentuk apa pun, tetapi hanya menampilkannya dengan benar dan dilucuti dari tag buruk?
Pertanyaan terkait
sumber
Jawaban:
Cara termudah (untuk Anda sebagai pengembang) mungkin untuk menerapkan salah satu dari banyak variasi Markdown , misalnya Markdown.NET atau, lebih baik lagi (imho), wmd-editor .
Kemudian, pengguna Anda dapat menempelkan HTML sederhana, tetapi tidak berbahaya, dan mereka dapat mempratinjau data yang dimasukkan dan meluruskan segala gangguan bahkan sebelum memposting ...
sumber
Daftar putih memang cara terbaik untuk mencegah serangan XSS ketika memungkinkan pengguna untuk memasukkan HTML, baik secara langsung atau menggunakan Rich Text Editor.
Tentang pertanyaan Anda yang lain:
Saya tidak berpikir ini bisa berhasil. Anda memerlukan kode sisi server untuk ini dan RTE berjalan pada klien.
TinyMCE memfilter tag jika Anda mau, tetapi karena ini terjadi di browser, Anda tidak dapat mempercayainya. Lihat extended_valid_elements . TinyMCE (Moxie) juga menyarankan masuk daftar putih, lihat di sini .
Anda harus selalu memfilter HTML kecuali ada alasan khusus untuk tidak (sangat jarang). Beberapa alasan: a) fungsionalitas yang untuk pengguna internal hari ini mungkin untuk publik besok b) akses yang tidak sah akan memiliki dampak yang lebih kecil
Itulah yang saya inginkan. Saya tidak suka mengubah input pengguna sebelum memasukkan ke dalam database karena berbagai alasan.
sumber
Saya melakukan hal yang sama. Saya menggunakan TinyMCE dan memungkinkan menempelkan dari dokumen Word. Hanya orang-orang tertentu yang mengelola situs yang dapat melakukan ini melalui area admin. Ini dijamin oleh Keanggotaan ASP.Net. Saya sederhana melakukan HTML. Masukkan kode ketika dikirim ke situs umum.
Anda dapat menggunakan kode di bawah ini jika Anda suka sebelum dimasukkan ke dalam basis data tetapi tidak yakin apa yang mempengaruhi itu akan memberi Anda. Anda mungkin harus pergi dengan daftar putih Anda.
sumber
Salah satu opsi mungkin Kontrol Edit HTML untuk .NET (yang saya tulis).
Ini adalah editor HTML WYSIWYM untuk .NET, yang hanya mendukung subset elemen HTML , tidak termasuk
<script>
elemen: jadi dengan cara itu berfungsi sebagai daftar putih.Jika itu untuk penggunaan internal (yaitu situs intranet), maka kontrol dapat disematkan di halaman web .
Saya belum mengintegrasikan dukungan untuk menempelkan dari Word, tetapi saya memiliki komponen yang merupakan langkah ke arah itu: konverter Doc to HTML ; jadi saya memiliki blok bangunan yang dapat Anda gunakan di ASP.NET untuk mengonversi Doc menjadi HTML, menampilkan HTML di editor, dll.
sumber
IMHO saya terus mempercayai pengguna Anda sampai Anda akan go public.
Ya, tidak ada cara yang dapat diandalkan untuk mencapai kebutuhan Anda. Misalnya setiap editor WYSIWYG gagal melindungi formulir memasukkan gambar dengan URL (trek penggunaan tidak langsung, konten ilegal) atau teks (teks ilegal, teks salah eja, teks missized).
Pandangan saya adalah bahwa jika Anda dapat mempercayai pengguna Anda, cukup izinkan semuanya, cukup beri tahu pengguna jika ada TAHU markup berbahaya (untuk menjaga mereka dari kesalahan).
Jika Anda tidak percaya, gunakan semacam markup khusus (mis. Penurunan harga).
Dalam proyek saya, kami menggunakan tipe khusus untuk konten yang berpotensi berbahaya dan metode khusus untuk merender dan menerima konten tersebut. Kode ini memiliki nilai tinggi dalam model utas kami dan perhatiannya sangat tinggi (misalnya setiap perubahan harus ditinjau oleh dua coders independen, kami memiliki rangkaian uji komprehensif dan sebagainya).
sumber