質問

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_AbstractMage_Core_Helper_Abstract どちらも同じ関数を使用します Mage_Core_Helper_Abstract::escapeHtml また、Internaly Internalyは、HTMLコンテンツを備えた配列のいくつかのADITIONALロジックを実装することに加えて、PHP HTMLSpecialChars関数を使用します。

この関数は、これを介してすべてのブロッククラスとヘルパークラスでアクセスできます。この関数は公開されているため、メイジ::ヘルパー( 'core')または他のヘルパークラスを介して使用できます。

スペインの改宗者の場合:

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top