防止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模版里的全部输出方法来判断是否全部输出都被正确转义
它包括一下状况:
escapeHtml
, escapeUrl
, escapeQuote
, escapeXssInUrl
是容许的,测试为绿色echo (int)$var
, (bool)$var
, count($var)
))测试是绿色