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";)
  • 其餘前面提到的。輸出未被轉義,測試紅色
相關文章
相關標籤/搜索