2016-08-31 10 views
5

私のプロジェクトでは、私は 'エスケープ'をサニタイズ値戦略として使用しています。そして私はある場所で翻訳ディレクティブ(属性)を使用しています。私が翻訳フィルタを使用しているいくつかの他の場所。ディレクティブで角翻訳命令のXSS

<span translate="{{vm.text}}"><span> 

これはXSSにvulnarableです。 vm.textの値が<script>alert()</script>の場合、スクリプトが実行され、ポップアップが表示されます。フィルターと

<span>{{vm.text | translate}}<span> 

vm.textの値はエスケープされたHTMLは、彼らがサニタイズ値として「エスケープ」を使用することをお勧めします角度翻訳ドキュメント(https://angular-translate.github.io/docs/#/guide/19_security)で&lt;script&gt;alert()&lt;/script&gt;

として示されていますstrategy said '現在、サニタイズモードに問題があり、UTF-8文字や特殊文字を2倍にエンコードします。推奨:これが解決されるまで 'エスケープ'戦略を使用してください '。

htmlを実行しないで<script>alert()</script>と表示する適切な方法はありますか?フィルタ(パイプ)で

+0

フィルタを使用すると正しくエスケープされますが、この種の攻撃はエスケープしません:#/ {{{} "))); alert(1)//";}}このディレクティブを使用すると、この種の攻撃ですが、あなたが説明するスクリプト攻撃では失敗します。だから私にとってこれは翻訳ライブラリの大きな穴です。 – Gurnard

答えて

0

あなたは常に要素に結合することができtextContentそうのようなプロパティ:のTextContentで何も今までに私の知る限りで解析されていないために必要な

<span [textContent]="vm.text | translate"></span>

ない手動エスケープやフィルタリングを。

+0

これはどのバージョンの角度ですか? – Gurnard

関連する問題