21

Angularjs は XSS 攻撃を処理します。私は ng-bind が世話をすることを読みました。しかし、それをテストするためにサンプルを実行しようとすると、ng-model を使用して入力タイプに html タグを挿入できます... Html タグをエスケープしませんでした。

私たちのページには多くの入力要素があり、これは ng-model にバインドされています。html タグを入力した場合、angular が html/scrip タグを無視することを確認するにはどうすればよいですか。

元。

<input id="name" ng-model="name"></input>

私が入力した場合

'Hello, <b>World</b>!'

$scope.name には、入力したものと同じものが含まれていますが、タグは除外されていません。すなわち

  var val = $scope.name;
  console.log(val); 

同じように印刷

'Hello, <b>World</b>!'

angularjsでこれを解決する方法を教えてください。

感謝

4

2 に答える 2

28

ここを見てください:http://docs.angularjs.org/api/ngSanitize/service/$sanitize

エスケープ使用が必要な場合はng-bind、次のように解釈せずにタグをレンダリングします。

Hello <b>World</b>Hello Worldとは違います。

わかりますか ?ng-bind は HTML タグを気にしないので安全です。

HTML タグを解釈したいが安全に ng-bind-html を使用したい場合は !

たとえば、次の文字列を表示する場合:

'Hello <b>World</b><input type="text" />'

結果は : Hello Worldになりますが、AngularJS コンパイラは $sanitize サービスを使用し、HTML 要素のホワイトリストをチェックし、入力が許可されていないため、入力はありません。

おそらく ng-bind-html が探しているものです。

ユーザーが入力に html タグを挿入できないようにしたい場合は、入力にディレクティブ ng-pattern を使用してください。

http://docs.angularjs.org/api/ng/directive/input

入力で許可されている文字には正規表現が必要です!

それが役に立てば幸い !

于 2014-04-11T09:03:52.120 に答える