如何转义输出数据?


Answers:


33

根据上下文,有几种辅助方法。所有都在中定义,Mage_Core_Helper_Abstract但也都在中定义Mage_Core_Block_Abstract,因此您可以$this->...()在每个模板中使用它们:

  • escapeHtml():实际上htmlspecialchars,它利用推荐的参数来转义HTML:$result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);-另外,您可以指定允许标签的白名单,并在数组上调用该方法以一次转义所有元素。将此用于任何内联文本。
  • quoteEscape():一种没有白名单和数组处理的简单版本,但是此版本转义了单引号和双引号,这对于HTML属性中的文本很有用。
  • jsQuoteEscape():这是用反斜杠转义单引号。它用于转义JavaScript中的字符串文字。但这并不安全。(例如@Xorax:)'test\\\'+alert("powned");//'。必须额外转义反斜杠。使用quoteEscape(),而不是!
  • escapeUrl():我不知道为什么这种方法存在,它不是 URL编码的字符串,它只是htmlspecialchars()没有任何参数的旧版本。不要使用它。曾经

    /**
     * Escape html entities in url
     *
     * @param string $data
     * @return string
     */
    public function escapeUrl($data)
    {
        return htmlspecialchars($data);
    }
    
  • 与此相关的是urlEncode(),它也不会应用URL编码,但是会应用base64…… 如果您不确切知道需要什么,请不要使用它。

    /**
     *  base64_encode() for URLs encoding
     *
     *  @param    string $url
     *  @return   string
     */
    public function urlEncode($url)
    {
        return strtr(base64_encode($url), '+/=', '-_,');
    }
    

是的,命名不一致。一旦所有这些方法的名称都遵循了该方案,somethingEscape()但是后来有人决定弃用htmlEscape()urlEscape()支持新方法,却忘记了quoteEscape()jsQuoteEscape()


jsQuoteEscape真的安全吗?看起来str_replace($ quote,'\\'。$ quote,...)不能完成工作... gist.github.com/xxorax/1c9653fd59785085f96d4f676bc64ee2
Xorax

@Xorax非常好。我将更新答案。
Fabian Schmengler '16

21

只需翻译一下

您应该始终使用标准翻译功能

在块实例中

<?php echo $this->__('Text goes here'); ?>

其他地方

<?php echo Mage::helper('core')->__('Text goes here'); ?>

sprintf以与PHP 相同的方式使用它

例如。

<?php $foo = 'rocks'; ?>
<?php echo $this->__('Sonassi %s', $foo); ?>

还是逃避它

在块实例中

<?php echo $this->escapeHtml('HTML goes here'); ?>

其他地方

使用 Mage/Core/Helper/Abstract.php

escapeHtml($data, $allowedTags = null)

例如。

<?php echo Mage::helper('core')->escapeHtml('HTML goes here'); ?>

重要说明:Mage_Core_Block_Abstract::htmlEscape()自Magento v 1.4.0.0-rc1起已弃用,Mage_Core_Block_Abstract::escapeHtml()应改为使用。
barell 2014年

5
另一个重要说明:翻译不能逃脱任何东西。试试看:$this->__('Hello %s', '<script>alert("XSS!")</script>')
Fabian Schmengler,2015年

3

Mage_Core_Block_Abstract和类Mage_Core_Helper_Abstract都使用相同的函数,Mage_Core_Helper_Abstract::escapeHtml并且其实现内部使用PHP htmlspecialchars函数,除了为具有HTML内容的数组实现一些附加逻辑。

可以通过$ this在所有块和帮助程序类中访问该函数,并且由于该函数是公共的,因此您可以在其他任何地方通过Mage :: helper('core')或其他一些帮助程序类使用该函数。


-1

对于西班牙语转换:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.