Escaper Phalcon

Website dan aplikasi Web rentan terhadap serangan XSS , meskipun PHP menyediakan fungsionalitas escape, tapi dalam beberapa konteks tidaklah cukup / sesuai. Phalcon \ Escaper menyediakan escape kontekstual, komponen ini ditulis dalam C memberikan beban/overhead minimal ketika escape berbagai jenis teks.

Kami merancang komponen ini didasarkan pada XSS (Cross Site Scripting) Cheat Sheet Pencegahan  dibuat oleh OWASP

Selain itu, komponen ini bergantung pada mbstring untuk mendukung hampir semua charset.

Untuk menggambarkan bagaimana komponen ini bekerja dan mengapa penting, perhatikan contoh berikut:

<?php

    //Document title with malicious extra HTML tags
    $maliciousTitle = '</title><script>alert(1)</script>';

    //Malicious CSS class name
    $className = ';`(';

    //Malicious CSS font name
    $fontName = 'Verdana"</style>';

    //Malicious Javascript text
    $javascriptText = "';</script>Hello";

    //Create an escaper
    $e = new Phalcon\Escaper();

?>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title><?php echo $e->escapeHtml($maliciousTitle) ?></title>

    <style type="text/css">
    .<?php echo $e->escapeCss($className) ?> {
        font-family  : "<?php echo $e->escapeCss($fontName) ?>";
        color: red;
    }
    </style>

</head>

<body>

    <div class='<?php echo $e->escapeHtmlAttr($className) ?>'>hello</div>

    <script>var some = '<?php echo $e->escapeJs($javascriptText) ?>'</script>

</body>
</html>

Yang menghasilkan berikut ini:

escape

Setiap teks dilakukan escape sesuai dengan konteksnya. Penggunaan konteks yang tepat penting untuk menghindari serangan XSS.

Escape HTML 

Situasi paling umum saat memasukkan data yang tidak aman adalah di antara tag HTML:

<div class="comments"><!-- Escape untrusted data here! --></div>

Anda dapat escape data tersebut menggunakan metode escapeHtml:

<div class="comments"><?php echo $e->escapeHtml('></div><h1>myattack</h1>'); ?></div>

Yang menghasilkan:

<div class="comments">&gt;&lt;/div&gt;&lt;h1&gt;myattack&lt;/h1&gt;</div>

Escape Atribut HTML  

Escape atribut HTML  berbeda dari escape konten full HTML. Escape ini bekerja dengan mengubah setiap karakter non-alfanumerik untuk form. Escape semacam ini dimaksudkan untuk sebagian atribut sederhana termasuk yang kompleks seperti ‘href’ atau ‘url’:

<table width="Escape untrusted data here!"><tr><td>Hello</td></tr></table>

Anda dapat escape atribut HTML dengan menggunakan metode escapeHtmlAttr:

<table width="<?php echo $e->escapeHtmlAttr('"><h1>Hello</table'); ?>"><tr><td>Hello</td></tr></table>

Yang menghasilkan:

<table width=""><h1>Hello</table"><tr><td>Hello</td></tr></table>

Escape URL 

Beberapa atribut HTML seperti ‘href’ atau ‘url’ harus di-escape berbeda:

<a href="Escape untrusted data here!">Some link</a>

Anda dapat escape atribut HTML dengan menggunakan metode escapeUrl:

<a href="<?php echo $e->escapeUrl('"><script>alert(1)</script><a href="#'); ?>">Some link</a>

Yang menghasilkan:

<a href="%22%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E%3Ca%20href%3D%22%23">Some link</a>

Escape CSS 

Pengidentifikasi/nilai CSS dapat dilakukan escape juga:

<a style="color: Escape unstrusted data here">Some link</a>

Anda dapat escape dengan menggunakan metode escapeCss:

<a style="color: <?php echo $e->escapeCss('"><script>alert(1)</script><a href="#'); ?>">Some link</a>

Yang menghasilkan:

<a style="color: \22 \3e \3c script\3e alert\28 1\29 \3c \2f script\3e \3c a\20 href\3d \22 \23 ">Some link</a>

Escape Javascript 

String yang akan dimasukkan ke dalam kode javascript juga harus escape dgn benar:

<script>document.title = 'Escape untrusted data here'</script>

Anda dapat escape dengan menggunakan metode escapeJs:

<script>document.title = '<?php echo $e->escapejs("'; alert(100); var x='"); ?>'</script>
<script>document.title = '\x27; alert(100); var x\x3d\x27'</script>
Terjemahan dr Escape Variabel Phalcon
http://docs.phalconphp.com/en/latest/reference/escaper.html