• Phalcon 上下文编码(Contextual Escaping)


    站点及其他B/S应用极易受到 XSS 攻击,虽然PHP提供了转义功能。在某些情况下依旧不够安全。在Phalcon中 PhalconEscaper 提供了上下文转义功能,这个模块是由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 PhalconEscaper();
    
    ?>
    
    <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 script3e alert28 129 3c 2f script3e 3c a20 href3d 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 xx3dx27'</script>
    
  • 相关阅读:
    Java中Runnable和Thread的区别
    JAVA Swing 事件监听
    java 监听机制模拟(JButton按钮监听机制)
    java事件处理机制(自定义事件)
    oracle之检查点(Checkpoint)
    linux内核值shmmax问题
    如何在VMware虚拟机间建立共享磁盘?
    Mysql 不同版本 说明
    mysql 概念和逻辑架构
    mysql 在大型应用中的架构演变
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6772740.html
走看看 - 开发者的网上家园