<com:TContent ID="body" >

<h1 id="5601">Keamanan</h1>

<h2 id="5602">Perlindungan Kondisi Tampilan</h2>
<p id="730563" class="block-content">
Kondisi tampilan berada di jantung PRADO. Kondisi tampilan menggambarkan data yang bisa dipakai untuk menyimpan kembali halaman ke kondisi terakhir kali dilihat oleh pengguna akhir sebelum membuat permintaan saat ini. Standarnya, PRADO menggunakan field tersembunyi untuk menyimpan informasi kondisi tampilan.
</p>
<p id="730564" class="block-content">
Sangat penting untuk memastikan bahwa kondisi tampilan tidak dirusak oleh pengguna akhir. Tanpa perlindungan, pengguna yang jahat bisa menginjeksi kode berbahaya ke dalam kondisi tampilan dan instruksi yang tidak diinginkan yang mungkin dilakukan ketika kondisi halaman sedang dikembalikan pada sisi server.
</p>
<p id="730565" class="block-content">
Untuk mencegah kondisi tampilan dari perusakan, PRADO memaksa kondisi tampilan memeriksa HMAC (Keyed-Hashing for Message Authentication) sebelum menyimpan kembali kondisi tampilan. Pemeriksaan itu bisa mendeteksi apakah kondisi tampilan sudah dirusak atau tidak oleh pengguna akhir. Seandainya kondisi tampilan dimodifikasi, PRADO akan berhenti mengembalikan kondisi tampilan dan mengembalikan pesan kesalahan.
</p>
<p id="730566" class="block-content">
Pemeriksaan HMAC memerlukan kunci pribadi yang harus menjadi rahasia bagi pengguna akhir. Para pengembang dapat menetapkan kunci ataupun membiarkan PRADO membuat kunci secara otomatis. Menetapkan kunci secara manual berguna saat aplikasi berjalan pada taman server. Untuk melakukannya, konfigurasi <tt>TSecurityManager</tt> dalam konfigurasi aplikasi,
</p>
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730186">
&lt;modules&gt;
    &lt;module id="security"
        class="TSecurityManager"
        ValidationKey="my private key" /&gt;
&lt;/modules&gt;
</com:TTextHighlighter>
<p id="730567" class="block-content">
Pemeriksaan HMAC tidak mencegah pengguna akhir dari pembacaan konten kondisi tampilan. Ukuran keamanan yang ditambahkanadalah untuk mengenkripsi informasi kondisi tampilan agar pengguna akhir tidak bisa mengurainya. Untuk menghidupkan enkripsi kondisi tampilan, setel <tt>EnableStateEncryption</tt> dari halaman menjadi true. Ini dapat dilakukan dalam <a href="?page=Configurations.PageConfig">konfigurasi halaman</a> atau dalam kode halaman. Catatan, mengenkripsi kondisi tampilan dapat menurunkan performansi aplikasi. Strategi yang lebih baik adalah dengan menyimpan kondisi tampilan pada sisi server daripada field tersembunyi.
</p>

<h2 id="5603">Pencegahan Penaskahan Situs Silang</h2>
<p id="730568" class="block-content">
Penaskahan situs silang (juga dikenal sebagai XSS) terjadi saat aplikasi web mengumpulkan data dari pengguna. Penyerang akan sering menyuntikan JavaScript, VBScript, ActiveX, HTML, atau Flash menjadi aplikasi yang mudah diserang guna mengelabui pengguna aplikasi lain dan mengumpulkan data darinya. Sebagai contoh, Sistem forum yang didesain dengan buruk dapat menampilkan input pengguna dalam tulisan forum tanpa pemeriksaan apapun. Kemudian penyerang bisa menyuntikan beberapa kode jahat JavaScript ke dalam sebuah tulisan agar pengguna lain membaca tulisan ini, JavaScript berjalan tidak seperti yang diharapkan pada komputernya.
</p>
<p id="730569" class="block-content">
Salah satu ukuran paling penting guna mencegah penyerangan XSS adalah memeriksa input pengguna sebelum menampilkannya. Seseorang dapat melakukan pengkodean-HTML dengan input pengguna untuk mencapai tujuan ini. Akan tetapi, dalam beberapa situasi, pengkodean-HTML mungkin tidak disukai karena ia mematikan seluruh tag HTML.
</p>
<p id="730570" class="block-content">
PRADO menyertakan pekerjaan <a href="http://pixel-apes.com/safehtml/">SafeHTML</a> dan menyediakan bagi para pengembang komponen berguna yang disebut <tt>TSafeHtml</tt>. Dengan mengurung konten di dalam tag komponen <tt>TSafeHtml</tt>, konten yang dikurung dipastikan amab bagi pengguna akhir. Sebagai tambahan, <tt>TTextBox</tt> yang umum dipakai memiliki properti <tt>SafeText</tt> yang berisi input pengguna yang dipastikan aman bila ditampilkan secara langsung ke pengguna akhir.
</p>

<h2 id="5604">Pencegahan Serangan Cookie</h2>
<p id="730571" class="block-content">
Melindungi cookie dari serangan adalah sangat penting, karena ID sesi umumnya disimpan dalam cookie. Jika seseorang memegang ID sesi, intinya ia mempunyai semua informasi sesi relevan.
</p>
<p id="730572" class="block-content">
Ada beberapa pengukur guna mencegah cookie dari serangan.
</p>
<ul id="u1" class="block-content">
  <li>Aplikasi dapat menggunakan SSL untuk membuat kanal komunikasi aman dan hanya mengirimkan cookie otentikasi melalui sambungan HTTPS. Para penyerang selanjutnya melakukan decipher isi dalam cookie yang dikirimkan.</li>
  <li>Sesi berakhir secara tidak benar, termasuk semua token cookie dan sesi, untuk mengurangi kemungkinan penyerangan.</li>
  <li>Mencegah penaskahan situs-silang (XSS) yang menyebabkan kode sesukanya berjalan dalam browser pengguna dan memunculkan cookie-nya.</li>
  <li>Memvalidasi data cookie dan mendeteksi apakah cookie diubah atau tidak.</li>
</ul>
<p id="730573" class="block-content">
PRADO menertapkan skema validasi cookie yang mencegah cookie dimodifikasi. Dalam keadaan tertentu, ia melakukan pemeriksaan HMAC untuk nilai cookie jika validasi cookie dihidupkan.
</p>
<p id="730574" class="block-content">
Validasi cookie standarnya dimatikan. Untuk menghidupkannya, konfigurasi modul <tt>THttpRequest</tt> seperti berikut,
</p>
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_730187">
<modules>
  <module id="request" class="THttpRequest" EnableCookieValidation="true" />
</modules>
</com:TTextHighlighter>
<p id="730575" class="block-content">
Untuk menggunakan skema validasi cookie yang disediakan oleh PRADO, anda juga perlu mengambil cookie melalui koleksi <tt>Cookies</tt> dari <tt>THttpRequest</tt> dengan menggunakan pernyataan PHP berikut,
</p>
<com:TTextHighlighter CssClass="source block-content" id="code_730188">
foreach($this->Request->Cookies as $cookie)
    // $cookie adalah tipe THttpCookie
</com:TTextHighlighter>
<p id="730576" class="block-content">
Untuk mengirimkan data cookie yang dikode dengan informasi validasi, buat obyek <tt>THttpCookie</tt> baru dan menambahkannya ke koleksi <tt>Cookies</tt> dari <tt>THttpResponse</tt>,
</p>
<com:TTextHighlighter CssClass="source block-content" id="code_730189">
$cookie=new THttpCookie($name,$value);
$this->Response->Cookies[]=$cookie;
</com:TTextHighlighter>

<div class="last-modified">$Id: Security.page 1741 2007-03-05 16:05:43Z xue $</div></com:TContent>