2013-11-26 11 views
13

なぜ私はこれを行うことはできません。

<div>{{data | htmlfilterexample}}</div> 

フィルタの内側に、私は戻っています、:

return $sce.trustAsHtml(input); 

を関係なく、<div ng-bind-html="data | htmlfilterexample"></div>作品を使用してフィルタがinputまたは$sce.trustAsHtml(input)を返した場合。

私は$sceがHTMLを信頼し、その方法で返される出力にng-bind-htmlは必要ないという印象を受けました。

ありがとうございました。

+0

私は混乱しています、あなたは後でその 'を

{{data | htmlfilterexample}}
を'行うと_cannot_言います'input'か' $ sce.trustAsHtml(input) 'のどちらを返すかにかかわらず動作しますか? –

+0

ええ、最初は '{{}} 'の中にあり、2番目は' ng-bind-html'の中にあります。 – Francisc

答えて

33

$sce.trustAsHtml()ng-bind-htmlで安全に使用できる文字列を生成します。あなたはng-bind-htmlがエラーをもたらすであろう文字列にその機能を使用しないようにした:$sce:unsafe] Attempting to use an unsafe value in a safe context.だから、$のSCEは、むしろ、それはそれはそれで使用しても安全に処理文字列を作るng-bind-htmlの必要性を取り除くことはありません。あなたが{{}}を使用しng-bindng-bind-html

の違いに嘘に実行している

特定の問題はng-bindのと同じです。

var parsed = $parse(attr.ngBindHtml); 
element.html($sce.getTrustedHtml(parsed(scope)) || ''); 

キーテイクアウトがng-bindということで、次の、とりわけ、

element.text(value == undefined ? '' : value); 

ながらng-bind-htmlん:だから、ng-bindソースコード(ng-bind-* source code)を見て、私たちはそれがこれを使用していることがわかり.texthttp://api.jquery.com/text/)を使用すると、文字列のテキスト表現が表示されます(HTMLが信頼できるかどうかは無視されます)。

getTrustedHtml()で安全宣言されている場合).htmlをhttp://api.jquery.com/html/)のng-bind-html使用はHTMLで結果がバージョンを解釈しながら

+0

ありがとう、ありがとう。 – Francisc

+5

"$ sce.trustAsHtml()はng-bind-htmlで使用するのに安全な文字列を生成します"と言っていると、致命的な誤解を招き、間違っているようです。 * sanitisation bypass *のプロキシが生成され、結果はng-bind-htmlで使用するには完全に安全ではない*かもしれません。通常、ng-bind-htmlで使用される式が 'X X'と評価された場合、スクリプト要素は' $ sanitize'によって 'XX'を残して削除されますが、値がtrustAsHtmlスクリプトタグはそのまま残ります。これはその目的であり、必要に応じて任意のHTMLを注入することができますが、何も "安全"ではありません。 – Nick

関連する問題