magento 模版xss安全

 

防止xss攻击的安全措施php

为了防止xss问题,magento推荐如下规则来转义模版里的输出内容:html

1.若是一个方法表名已经被转义过了,不要再次进行转义:好比getHtmlTitile(),getTitleHtml() (这个title 已经能够进行html 输出)安全

2.类型定义和PHP方法不须要转义xss

3.单引号里的输出不须要被转义post

4.双引号里没有变量不须要转义测试

5.其余的状况,使用特定的转义方法进行转义ui

如下的代码示例模版 xss 安全输出:this

<?php echo $block->getTitleHtml() ?>
<?php echo $block->getHtmlTitle() ?>
<?php echo $block->escapeHtml($block->getTitle()) ?>
<h1><?php echo (int)$block->getId() ?></h1>
<?php echo count($var); ?>
<?php echo 'some text' ?>
<?php echo "some text" ?>
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()) ?>"><?php echo $block->getAnchorTextHtml() ?
></a>

 模版转义方法spa

如下输出状况使用特色的方法来生成xss安全输出。.net

即将发布的magento 2.2将会丢弃这些方法。

示例: JSON输出

方法: 不须要方法转义

<!-- In this example $postData is a JSON string -->
  <button class="action" data-post='<?php /* @noEscape */ echo $postData ?>' />

 示例: html 输出

方法:escapeHtml

<a href="<?php echo $block->escapeUrl($block->getCategoryUrl()) ?>">Some Link</a>

示例: html属性

方法:escapeQuote

<span class="<?php $block->escapeQuote($block->getSpanClass()) ?>">Product Description</span>

 静态测试:

你能够使用dev\tests\static\testsuite\Magento\Test\Php\目录下的XssPhtmlTemplateTest.php静态文件来测试模版的xss漏洞。

这个文件会找到phtml模版里的全部输出方法来判断是否全部输出都被正确转义

它包括一下状况:

  • /* @noEscape */ 在输出前出现。输出不须要转义。测试是绿色
  • /* @escapeNotVerified */ 在输出前出现。输出转义没有被检查,须要被验证。测试绿色
  • 包含有html的方法(例如echo $object->{suffix}Html{postfix}() )。数据已经准备好输出。测试为绿色
  • AbstractBlock 方法escapeHtmlescapeUrlescapeQuoteescapeXssInUrl  是容许的,测试为绿色
  • 类型定义和PHP方法 count() 是容许的(例如:echo (int)$var(bool)$varcount($var)))测试是绿色
  • 单引号里面的输出(例如: echo 'some text';)绿色
  • 双引号里不包含变量的输出(例如:echo "some text";)
  • 其余前面提到的。输出未被转义,测试红色
相关文章
相关标签/搜索