Content Scrubbing with HtmlScrubber
Pernah menggunakan TinyMCE atau FCKEditor? Atau memasukkan kalimat-kalimat 'aneh' seperti tag HTML pada inputan pada halaman web form? Dijamin ketika suatu request dilakukan ASP.NET akan melindungi dirinya sendiri dan akan mengeluarkan pesan 'error' yang seperti berikut :
Gambar di atas contoh saat disuatu TextBox dimasukkan nilai dalam berupa tag HTML. Nilai dari inputan ditolak karena berpotensial menimbulkan 'bencana' :) Kalau begini artinya akan merepotkan kalau TextBox akan disulap menjadi Rich Text Editor dengan menggunakan TinyMCE atau FCK Editor.
Cara yang paling gampang untuk mengijinkan user memberikan tag HTML atau 'nilai-nilai' berbahaya lainnya cukup dengan memberikan nilai true pada property ValidateRequest yang ada paga Page directive.
Dengan melakukan cara di atas sekarang TextBox sudah bebas dimasukkan 'apa saja' termasuk kode berbahaya. Semoga posting ini berguna, selamat mencoba dan menempuh bahaya. :)
Uuups...bukan itu inti dari posting ini.
. . .
Rich Text Editor saat ini bukan barang baru, kita akan melihatnya pada saat menulis email di Yahoo Mail, GMail, CMS seperti DNN, blog dan forum engine seperti Community Server dan lain-lain. Tetapi tentu saja hal-hal yang tidak diinginkan harus ditanggulagi, dengan melakukan pemeriksaan setiap nilai dimasukkan. Pada Community Server tersebutlah suatu nama perlindungan yaitu HtmlScrubber.
Perlindungan ini akan memastikan tag-tag HTML apa saja yang dapat disimpan atau ditampilkan. Tag-tag yang boleh disimpan atau ditampilkan disimpan pada suatu daftar yang disimpan pada file communityserver.config. Berikut adalah sintaks yang digunakan untuk mendaftarkan tag-tag yang dibolehkan.
<MarkUp>
<globalAttributes>
<class enable = "true" />
<style enable = "true" />
<align enable = "true" />
<id enable = "true" />
</globalAttributes>
<selfContained>
<br />
<img />
<input />
<link />
<meta />
<base />
<hr />
</selfContained>
<html>
<h1 />
<h2 />
<h3 />
<h4 />
<h5 />
<h6 />
<h7 />
<strong />
<em />
<u />
<b />
<i />
<strike />
<sub />
<sup />
<font size = "true" color = "true" face = "true" />
<blockquote dir = "true" />
<ul />
<ol start="true" />
<li />
<p dir = "true" />
<address />
<div />
<hr />
<br />
<a href = "true" title = "true" name = "true" target= "true" rel = "true" />
<span />
<img src = "true" alt = "true" title = "true" border = "true" width = "true" height = "true" hspace = "true" />
<table cellpadding = "true" cellspacing = "true" bgcolor = "true" />
<th />
<td rowspan = "true" colspan = "true" />
<tr />
<pre />
<code />
<xmp />
<lecut />
</html>
</MarkUp>
Keterangan :
Diantara <globalAttributes> . . . </globalAttributes>, adalah property pada HTML yang boleh ditambahkan pada tag HTML. Sebagai contoh bila anda mengetikkan tag berikut :
<div class="TestClass" id="TestContainer" align="center" style="font-size:13px" bgcolor="red">
</div>
Maka dapat dipastikan baris tersebut akan disimpan menjadi sebagai berikut :
<div class="TestClass" id="TestContainer" align="center" style="font-size:13px">
</div>
Ini dikarenakan property yang dibolehkan pada tag HTML hanya class, id, align dan style. Sedangkan bgcolor tidak termasuk didalamnya sehingga secara otomatis akan dihilangkan.
Diantara <selfContained> . . . </selfContained>, adalah tag-tag yang akan secara otomatis dimodifikasi sesuai dengan aturan yang baku. Sebagai contoh ketika dituliskan tag :
<br>, <hr>
maka HtmlScrubber akan mengubahnya menjadi :
<br/>, <hr/>
Kemudian di antara <html> . . . </html> adalah daftar tag dan property yang dibolehkan untuk ditambahkan, artinya dapat dipastikan ketika tag-tag seperti berikut ditambahkan,
maka ada ada tag-tag yang akan dihilangkan, seperti tag <object>, <param>, <embed>. Bila ingin ketiga tag ini dapat disimpan maka pada <html> . . . </html> perlu ditambahkan baris seperti berikut :
<object style = "true" height = "true" width = "true" />
<param name = "true" value = "true" />
<embed src = "true" type = "true" allowscriptaccess = "true" allowfullscreen = "true" width = "true" height = "true" />
Artinya kita bisa menambahkan tag <object> dengan property yang diijinkan adalah style, height dan width.
Dengan cara diatas maka dapat di-embed (salah satunya) konten Flash apapun dari alamat manapun pada posting blog (tetapi juga berakibat pada posting forum, gallery dan file juga). Artinya siap2 saja akan banyak konten yang baik (baca : putih) sampai konten yang remang-remang (baca : abu-abu).
Sampai saat ini saya belum tahu apakah hal seperti HtmlScrubber ini juga dimiliki oleh ASP.NET? Harus melakukan eksplorasi terlebih dahulu. Bila ada yang tahu tentang hal yang seperti ini pada ASP.NET, mungkin bisa drop comment atau lebih baik lagi posting blog untuk share pengalaman (biar ngga cape nyari di jagad maya) :)
Ini akhir dari cerita tentang HtmlScrubber yang ada pada Community Server. Mungkin teman-teman yang memegang 'barang' lain seperti DNN, Blog Engine .NET dapat bercerita tentang hal yang serupa dengan HtmlScrubber ini.