web-dev-qa-db-ja.com

属性ベースのxss攻撃で二重引用符をバイパスする方法

私が持っているコードは:

<input type="text" name="some_name" value="<?php echo CHtml::encode($str); ?>" />

$ strは入力データです。 'CHtml :: encode()'は、特殊文字をHTMLエンティティにエンコードするYiiの方法です。これはバイパスできますか?

入力の前後に二重引用符を付けないと、壊れる可能性があります。しかし、二重引用符で囲むだけでは問題が解決しないとは思いません。

3
kumar

encode() メソッドHTMLは文字をエンコードします。これは、このコンテキストでは正しい XSS防止メソッド です。

したがって、"文字が$strの内側に挿入されてHTML属性コンテキストから抜け出そうとすると、HTML表現である&quot;または&#34;に変換されます。 。

したがって、ここでスクリプトを挿入することはできません。これは、encode自体に、これを可能にする欠陥がないことを前提としています。

6
SilverlightFox

attribute value(double-quoted)state 内では、リテラルの二重引用符"文字のみ(U + 0022 )その状態からの適切な終了を許可します。これは 文字のファジングの結果、HTML属性の二重引用符と構文的に同等 の結果によってもバックアップされます。

したがって、緩和手法によってこれらのリテラル文字が削除された場合、引用された属性値からエスケープしようとするXSSから安全です。

ただし、一部の属性値は、on…イベント属性、スタイル属性、またはjavascript:で始まるURI属性などの特別な方法で解釈されることに注意してください。したがって、XSSの防止は、構文だけでなくセマンティクスの問題でもあります。

3
Gumbo