Security
ユーザー入力のサニタイズ
ion-alertなどのコンポーネントでは、開発者はカスタムまたはユーザー提供のコンテンツを許可できます。このコンテンツはプレーンテキストまたは HTML であり、信頼できないものとして扱う必要があります。信頼できない入力と同様に、それを使用する前にサニタイズすることが重要です。特に、サニタイズせずにinnerHTMLのようなものを使用すると、悪意のある行為者が悪意のあるコンテンツを入力し、クロスサイトスクリプティング攻撃(XSS)を実行する攻撃ベクトルを提供する可能性があります。
Ionic には、提供するコンポーネント用の基本的なサニタイズ実装が組み込まれています。ただし、これは包括的なソリューションではありません。渡されるすべてのデータがサニタイズされていることを確認するのは開発者の責任です。異なるフレームワークには、ユーザー入力をサニタイズするための異なるソリューションがあるため、開発者は特定のフレームワークが提供する機能に精通する必要があります。
フレームワークを使用していない開発者、またはフレームワークが必要なサニタイズメソッドを提供していない開発者には、sanitize-htmlの使用を推奨します。このパッケージは、開発者がアプリケーションで許可する正確なタグと属性を指定できるシンプルな HTML サニタイザーを提供します。
Angular
Angular にはDomSanitizerクラスが組み込まれています。これは、値が DOM で安全に使用できることを保証することで、XSS の問題を防ぐのに役立ちます。デフォルトでは、Angular は安全でないと判断した値をマークします。たとえば、以下のリンクは、JavaScript を実行しようとするため、Angular によって安全でないとマークされます。
public myUrl: string = 'javascript:alert("oh no!")';
...
<a [href]="myUrl">Click Me!</a>
Angular が提供する組み込みの保護機能の詳細については、Angular Security Guideを参照してください。
React
React DOM は、JSX に埋め込まれた値を文字列に変換してからレンダリングする前にエスケープします。たとえば、以下の例では、nameがレンダリングされる前に文字列に変換されるため、安全です:
const name = values.name;
const element = <h1>Hello, {name}!</h1>;
ただし、これは誰かがアンカー要素のhref属性などの場所に JavaScript を注入することを防ぐものではありません。以下は安全ではなく、XSS 攻撃が発生する可能性があります:
const userInput = 'javascript:alert("Oh no!")';
const element = <a href={userInput}>Click Me!</a>;
開発者がより包括的なサニタイズを実現する必要がある場合は、sanitize-htmlパッケージを使用できます。
Vue
Vue は組み込みのサニタイズメソッドを提供していません。開発者はsanitize-htmlなどのパッケージを使用することを推奨します。
v-htmlなどのディレクティブにバインドする際のセキュリティ推奨事項の詳細については、Vue Syntax Guideを参照してください。