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でこれを解決する方法を教えてください。
感謝
こちらをご覧ください: 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" />'
結果は次のようになります。こんにちは 世界 ただし、AngularJSコンパイラは$ sanitizeサービスを使用してHTML要素のホワイトリストをチェックし、入力は許可されないため、入力はありません。
たぶん、ng-bind-htmlがあなたが探しているものです。
ユーザーが入力にhtmlタグを配置できないことを確認したい場合は、入力でディレクティブng-patternを使用するだけです!
http://docs.angularjs.org/api/ng/directive/input
入力で許可される文字の正規表現が必要です!
それが役に立てば幸い !
AngularJSにデフォルトのホワイトリスト入力検証があるとは思わないが、これはテストで行うことです。そのため、ユーザーは好きなものをほとんど入力できます。これは驚くことではありません-ホワイトリストは非常にドメイン固有であり、Angularは幅広いドメイン向けに設計されたフレームワークです。
XSSに対する主な防御策は、信頼できないデータをすべて適切にエンコードすることです( https://www.owasp.org/index.php/Top_10_2013-A3-Cross-Site_Scripting_(XSS) を参照)。これは、Angularはデフォルトで行います。
要するに、AngularJSはデフォルトでXSSから保護されることを目的としており、特別なアクションは必要ありません。通常の{{scopevariable}}
表記を使用してビューに入力した内容を出力することにより、いくつかの基本的なシナリオを検証できます。
AngularJS XSS脆弱性の詳細な分析を見つけました: https://code.google.com/p/mustache-security/wiki/AngularJS 。コメントの最後に、Googleドキュメントへのリンクがあり、angularチームからのさらなる議論と回答があります。