出力データを逃れる方法は?
質問
XSSを防ぐための出力テンプレートデータを逃れるための組み込みのMagentoヘルパーはありますか?
または、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
また、Internaly Internalyは、HTMLコンテンツを備えた配列のいくつかのADITIONALロジックを実装することに加えて、PHP HTMLSpecialChars関数を使用します。
この関数は、これを介してすべてのブロッククラスとヘルパークラスでアクセスできます。この関数は公開されているため、メイジ::ヘルパー( 'core')または他のヘルパークラスを介して使用できます。
スペインの改宗者の場合:
$value = str_replace(array("<", ">"), array("<", ">"), htmlspecialchars("Lorem ipsum >", ENT_COMPAT, "UTF-8", false));