站点及其他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=""><h1>Hello</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>

Phalcon 上下文编码(Contextual Escaping)的更多相关文章

  1. phalcon: 上下文转义

    phalcon: 上下文转义 Phalcon\Escaper 转义特殊的字符 一:字符转义 $maliciousTitle = '</title><script>alert(1 ...

  2. 关于情感分类(Sentiment Classification)的文献整理

    最近对NLP中情感分类子方向的研究有些兴趣,在此整理下个人阅读的笔记(持续更新中): 1. Thumbs up? Sentiment classification using machine lear ...

  3. 强化学习之三点五:上下文赌博机(Contextual Bandits)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  4. js中的三个编码函数:escape,encodeURI,encodeURIComponent

    1. eacape(): 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / .其他所有的字符都会被转义序列替换.其它情况下es ...

  5. 在EntityFramework6中管理DbContext的正确方式——3环境上下文DbContext vs 显式DbContext vs 注入DbContext(外文翻译)

    (译者注:使用EF开发应用程序的一个难点就在于对其DbContext的生命周期管理,你的管理策略是否能很好的支持上层服务 使用独立事务,使用嵌套事务,并行执行,异步执行等需求? Mehdi El Gu ...

  6. angular源码分析:angular中脏活累活承担者之$parse

    我们在上一期中讲 $rootscope时,看到$rootscope是依赖$prase,其实不止是$rootscope,翻看angular的源码随便翻翻就可以发现很多地方是依赖于$parse的.而$pa ...

  7. angularJS---service

    service ng的服务是这样定义的: Angular services are singletons objects or functions that carry out specific ta ...

  8. angular源码分析:angular中入境检察官$sce

    一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...

  9. AngularJS 使用$sce控制代码安全检查

    由于浏览器都有同源加载策略,不能加载不同域下的文件.也不能使用不合要求的协议比如file进行访问. 在angularJs中为了避免安全漏洞,一些ng-src或者ng-include都会进行安全校验,因 ...

随机推荐

  1. 【CF1020E】Sergey's problem(构造)

    题意: 思路:这是一道论文题 https://link.springer.com/content/pdf/10.1007/BFb0066192.pdf From http://www.cnblogs. ...

  2. 第18章 Active控件

    转自: https://blog.csdn.net/u014162133/article/details/46573873 容器和服务器程序 容器应用程序时可以嵌入或链接对象的应用程序.Word就是容 ...

  3. Linux文件查找命令find,xargs详述【转】

    转自:http://blog.csdn.net/cxylaf/article/details/4069595 转自http://www.linuxsir.org/main/?q=node/137 Li ...

  4. c++类的隐藏,覆盖和重载,using关键字使用

    转载一篇文章: http://www.cnblogs.com/ustc11wj/archive/2012/08/11/2637316.html 类的隐藏和重载不一样 类的隐藏是指 一个类继承自另外一个 ...

  5. 51nod 1649.齐头并进-最短路(Dijkstra)

    1649 齐头并进 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过 ...

  6. 【bzoj4808】【马】二分图最大点独立集+简单感性证明

    (上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...

  7. 分金币 Uva 11300

    题意 给定N个人成环状坐,每个人初始分配Ai的金币,金币总数可以被N整除,每个人可以给左右相邻的人一定数量的金币使得最终每个人的金币数量相同,求转移数量最小的方案所转移的总金币数量. N<=10 ...

  8. kong的preserve_host和strip_uri解析

    preserve_host:当代理的时候,k代理时,Kong的默认行为是将上游请求的Host头设置为API的upstream_url属性的主机名.这个参数接受一个boolean值. 当为FALSE时, ...

  9. http 头信息详解(转)

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...

  10. Java Web实现跨域

    import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import ja ...