题
是否有内置的洋红色助手来逃避输出模板数据以防止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_Abstract
和 Mage_Core_Helper_Abstract
两者都使用相同的功能 Mage_Core_Helper_Abstract::escapeHtml
它的实现Interaly使用了PHP HTMLSpeceialChars功能,除了为具有HTML内容的数组实施一些ADITIONAL逻辑。
可以通过$ this在所有块和辅助类中访问该功能,并且由于该功能是公开的,因此您可以通过Mage :: Helper('core')或其他任何其他助手类使用。
对于西班牙语转换:
$value = str_replace(array("<", ">"), array("<", ">"), htmlspecialchars("Lorem ipsum >", ENT_COMPAT, "UTF-8", false));