Phalcon 上下文编码(Contextual Escaping)

站点及其他B/S应用极易受到 XSS 攻击,虽然PHP提供了转义功能。在某些情况下依旧不够安全。在Phalcon中 Phalcon\Escaper 提供了上下文转义功能,这个模块是由C语言实现的, 这在进行转义时能够有更好的性能。

Phalcon的上下文转义组件基于 OWASP 提供的`XSS (Cross Site Scripting) 预防作弊表`_

另外。这个组件依赖于 mbstring 扩展,以支持差点儿全部的字符集。

以下的样例中展示了这个组件是怎样工作的:

<?php

    //带有额外的html标签的恶意的文档标题
    $maliciousTitle = '</title><script>alert(1)</script>';

    //恶意的css类名
    $className = ';`(';

    //恶意的css字体名
    $fontName = 'Verdana"</style>';

    //恶意的Javascript文本
    $javascriptText = "';</script>Hello";

    //创建转义实例对象
    $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>

结果例如以下:


Phalcon会依据文本所处的上下文进行转义。 恰当的上下文环境对防范XSS攻击来说是很重要的。

HTML 编码(Escaping HTML)

最不安全的情形即是在html标签中插入非安全的数据。

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

我们能够使用escapeHtml方法对这些文本进行转义:

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

结果例如以下:

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

HTML 属性编码(Escaping HTML Attributes)

对html属性进行转义和对html内容进行转义略有不同。

对html的属性进行转义是通过对全部的非字母和数字转义来实现的。类例的转义都会如此进行的,除了一些复杂的属性外如:href和url:

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

我们这里使用escapeHtmlAttr方法对html属性进行转义:

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

结果例如以下:

<table width="&#x22;&#x3e;&#x3c;h1&#x3e;Hello&#x3c;&#x2f;table"><tr><td>Hello</td></tr></table>

URL 编码(Escaping URLs)

一些html的属性如href或url须要使用特定的方法进行转义:

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

我们这里使用escapeUrl方法进行url的转义:

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

结果例如以下:

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

CSS 编码(Escaping CSS)

CSS标识/值也能够进行转义:

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

这里我们使用escapeCss方法进行转义:

<a style="color: <?

php

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

>

" >Some link </a>

结果:

<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>

Javascript 编码(Escaping Javascript)

插入Javascript代码的字符串也须要进行适当的转义:

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

这里我们使用escapeJs进行转义:

<script>document.title = '<?php echo $e->escapejs("'; alert(100); var x='"); ?

>

' </script>
<script>document.title = '\x27; alert(100); var x\x3d\x27'</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值