站点及其他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. 【CF1016F】Road Projects(贪心)

    题意:给你一棵n 个节点的树,定义1到n的代价是1到 n节点间的最短路径的长度. 现在给你 m 组询问,让你添加一条边权为 w 的边(不与原图重复),求代价的最大值.询问之间相互独立. 1≤n,m≤3 ...

  2. 制作TimeLine物流信息展示效果

    var TimeLine = function (_id) { this.id = _id; this._top = 40; this.vHeight = 40; this.global_top = ...

  3. 培训补坑(day1:最短路&two-sat)

    经过12天的滚粗,终于迎来了暑期培训的结尾啦QAQ 结业考才考了90分,真是对不起孙爷(孙爷请收下我的膝盖) orz小粉兔怒D rank 1 获得小粉兔一只QAQ 由于这次12天的培训题目又比较多,算 ...

  4. 在 Flask 项目中解决 CSRF 攻击

    #转载请留言联系 1. CSRF是什么? CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造. CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.包括:以你名义 ...

  5. 纠正网上乱传的android调用Webservice方法。

    1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webser ...

  6. 日志三剑客ELK

    新的服务器需要搭建ELK三剑客,就是日志分析的工具,整理下步骤,供以后复习用. 说明下,我这里使用的是logstash从redis里获取日志信息的.所以还需要redis,这里就不做redis的介绍了. ...

  7. 16aspx源码要求安装.csproj类型怎么安装

    更改打开方式(不要双击打开),右键项目-打开方式选VS打开(应该会出现一个转换界面,转换下就好了).如果没有出那个界面我也没办法了

  8. Python的支持工具[1] -> 可执行文件生成工具[0] -> pyinstaller

    pyinstaller pyinstaller安装方式: pip install pyinstaller 使用方法: cmd –> cd dictionary –> pyinstaller ...

  9. SpringCloud简介(一)

    一.SpringCloud简介 SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.负载均衡.微代理.事件总线.全局锁.决策竞选.分布式会话等等 ...

  10. bzoj 5346: tree (其实是是某次雅礼集训的题)

    用prufer序列的公式直接dp,O(n^4)的算法简简单单就写出来了23333. 按理说 O(n^4)是需要优化成O(n^3)才能过的,然鹅我也不知道我怎么过了23333 (那就懒得优化了hhhhh ...