防止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)
))測試是綠色