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=""><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>
时间: 2024-08-08 01:18:27

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

phalcon: 上下文转义

Phalcon\Escaper 转义特殊的字符 一:字符转义 $maliciousTitle = '</title><script>alert(1)</script>'; $e = new Phalcon\Escaper(); echo $e->escapeHtml($maliciousTitle) 最不安全的情形即是在html标签中插入非安全的数据 我们可以使用escapeHtml方法对这些文本进行转义: $e->escapeHtml('></

JSP页面跳转编码设置(Tomcat服务器)

在做JSP系统时经常遇到的就是编码问题 而这个服务器可以是Tomcat.Weblogic,Tomcat服务器默认的编码为iso-8859-1,Weblogic默认的编码为UTF-8,所以程序运行时要注意编码设置 现在我们以一个jsp页面的代码,解释这些编码设置pageEncoding="UTF-8"说的是页面的编码,比如标题栏<title>还有其它内容等等 <meta http-equiv="Content-Type" content="

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

1. eacape(): 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / .其他所有的字符都会被转义序列替换.其它情况下escape,encodeURI,encodeURIComponent编码结果相同. escape对0-255以外的unicode值进行编码时输出%u****格式 可以使用 unescape() 对 escape() 编码的字符串进行解码. ECMAScript v3 反对使用该方法,应用使用 deco

算术编码的原理与分析

转自:http://kulasuki115.blogcn.com/diary,201492702.shtml 前言 人类已进入信息时代,信息时代的重要特征是信息的数字化,人们越来越依靠计算机获取和利用信息,这就需要对信息的表示.存储.传输和处理等关键技术进行研究.我们要把数值.文字.语言.声音.图像.图形.视频和动画等多种媒体转化成计算机所能处理的数字信息,但数字化后的视频和音频等媒体信息的数据量是非常大的.因此,数字化信息的数据量很大,这样大的数据量,无疑给存储器的存储容量.通信干线的信道传输

angular中的ng-bind-html指令和$sce服务

angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.如: $scope.currentWork.description = “hello,<br><b>今天我们去哪里?</b>” 我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的.是这样的 hello, 今天我们去哪里? 怎么办呢?

第十弹:DPM

一.论文翻译 摘要 本文介绍了一个基于混合多尺度可变形部件模型(mixtures of multiscale deformablepart model)的目标检测系统.此系统可以表示各种多变的目标并且在PASCAL目标检测挑战赛上达到了目前最优结果(state-of-the-art).虽然可变形部件模型现在很流行,但它的价值并没有在类似PASCAL这种较难的测试集上进行展示.此系统依赖于使用未完全标注(partially labeled)的样本进行判别训练的新方法.我们提出了一种间隔敏感(mar

深入理解AngularJS中的ng-bind-html指令和$sce服务

angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.如: $scope.currentWork.description = "hello,<br><b>今天我们去哪里?</b>" 我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的.是这样的 hello, 今天我们

【转载】AngularJS 用$sce服务来过滤HTML标签,解决无法正确显示后台传递的html标签

angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签.如: $scope.currentWork.description = “hello,<br><b>今天我们去哪里?</b>” 我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的.是这样的 hello,<br><s

Web学习之css

CSS指层叠样式表(Cascading Style Sheets),CSS 是标准的布局语言,用来控制元素的尺寸.颜色.排版.CSS 由 W3C 发明,用来取代基于表格的布局.框架以及其他非标准的表现方法.样式 (style) 定义如何显示 HTML 元素:样式通常存储于样式表中:外部样式表存储于 CSS 文件中. CSS可以解决html代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显示效果功能.简单一句话:CSS将网页内容和显示样式进行分离,提高了显示功能. 1.CSS基础