是否有内置的洋红色助手来逃避输出模板数据以防止XSS?

还是我应该只使用PHP htmlspecialchars 或者 htmlentities 功能?

有帮助吗?

解决方案

根据上下文,有几种辅助方法。全部定义 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().

其他提示

只是翻译它

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

在块实例中

<?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_AbstractMage_Core_Helper_Abstract 两者都使用相同的功能 Mage_Core_Helper_Abstract::escapeHtml 它的实现Interaly使用了PHP HTMLSpeceialChars功能,除了为具有HTML内容的数组实施一些ADITIONAL逻辑。

可以通过$ this在所有块和辅助类中访问该功能,并且由于该功能是公开的,因此您可以通过Mage :: Helper('core')或其他任何其他助手类使用。

对于西班牙语转换:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
许可以下: CC-BY-SA归因
scroll top