是否有内置的Magento帮助器可以转义输出的模板数据以防止XSS?
还是应该只使用PHP htmlspecialchars
或htmlentities
函数?
是否有内置的Magento帮助器可以转义输出的模板数据以防止XSS?
还是应该只使用PHP htmlspecialchars
或htmlentities
函数?
Answers:
根据上下文,有几种辅助方法。所有都在中定义,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_Abstract::htmlEscape()
自Magento v 1.4.0.0-rc1起已弃用,Mage_Core_Block_Abstract::escapeHtml()
应改为使用。
$this->__('Hello %s', '<script>alert("XSS!")</script>')
。
类Mage_Core_Block_Abstract
和类Mage_Core_Helper_Abstract
都使用相同的函数,Mage_Core_Helper_Abstract::escapeHtml
并且其实现内部使用PHP htmlspecialchars函数,除了为具有HTML内容的数组实现一些附加逻辑。
可以通过$ this在所有块和帮助程序类中访问该函数,并且由于该函数是公共的,因此您可以在其他任何地方通过Mage :: helper('core')或其他一些帮助程序类使用该函数。