Angular アプリケーションには、サーバー側のユーザー コンテンツで満たされたリンクがあります。そのため、そのリンク コンテンツを解釈しないように Angular に指示する必要があります。それ以外の場合、ユーザーまたは攻撃者がそこに Angular バインディング式 ({{User.Password}} など) を配置すると、Angular はそれを評価し、セキュリティ ホール (一種の XSS 攻撃) を開きます。
ng-non-bindableはほとんどそれを行います。ただし、リンク自体を Angular で操作することも必要です。
<a href="" class="side-bar-element" ng-class="{ 'side-bar-element-selected': isSiteSelected(@site.value.ID) }">@site.value.Name</a>
@site.value.Name は、コンテンツを挿入するサーバー側のコードです。
ng-non-bindable を a 要素に配置すると、ng-class は機能しません。私が見ることができる唯一の解決策は、その中に別のスパン/ divを挿入し、それに ng-non-bindable を適用することです:
<a href="" class="side-bar-element" ng-class="{ 'side-bar-element-selected': isSiteSelected(@site.value.ID) }"><span ng-non-bindable>@site.value.Name</span></a>
Angular がサーバー側のデータに干渉するのを止めるためだけに HTML 構造を変更する必要があるため、これは扱いにくいように思えます。
よりクリーンなソリューションはありますか?
理想的には、ng-non-bindable (またはバリアント) が「コンテンツをバインドしないが、それ以外の場合はこの要素を通常どおりに扱う」ことを意味するようにしたいと考えています。