出力されたテンプレートデータをエスケープしてXSSを防ぐ組み込みのMagentoヘルパーはありますか?
または、PHP htmlspecialchars
またはhtmlentities
関数を使用するだけですか?
出力されたテンプレートデータをエスケープして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::htmlEscape()
は、Magento v 1.4.0.0-rc1で非推奨になり、Mage_Core_Block_Abstract::escapeHtml()
代わりに使用する必要があります。
$this->__('Hello %s', '<script>alert("XSS!")</script>')
。
クラスMage_Core_Block_Abstract
とMage_Core_Helper_Abstract
両方が同じ関数Mage_Core_Helper_Abstract::escapeHtml
を使用し、その実装は、HTMLコンテンツを含む配列のいくつかの追加ロジックを実装することに加えて、PHP htmlspecialchars関数を内部的に使用します。
この関数は、すべてのブロッククラスおよびヘルパークラスで$ thisを介してアクセスできます。関数はパブリックなので、他の場所でMage :: helper( 'core')または他のヘルパークラスを使用して使用できます。