なぜPHPアプリにセキュリティホールが多いのか?

【スクリプトインジェクション対策15】JavaScriptが無効なクライアントでも利用可能なサイトにする

最近はJavaScriptが使えることが前提であるサイトが非常に増えています。JavaScriptが無効だとリンクやボタンをクリックできなかったり、クリックできても「Page not found」になって表示できなかったりする大手サイトが数多くあります。

あり得ないと考えるべきですが、仮に自分が構築したサイトが完全な安全性を維持しているとします。しかし、ほかの非常に多くのサイトはスクリプトインジェクションに対して脆弱です。自衛の方法としてスクリプトの実行を行えないようにしているユーザも少なからずいます。

理想的にはJavaScriptが無効なサイトでもユーザが不便なく利用できるようにすべきです。特に公共性の高いサイトは目新しさや派手さなどは求めるべきでなく、アクセシビリティが高いサイトを構築すべきです。

スクリプトが実行できないとすべての機能が利用できず、ナビゲーションやフォーム送信に支障がある場合は、最低限<noscript>タグを使用してユーザにJavaScriptが有効でないと利用できないことを知らせるべきです。

例:noscriptタグの利用
<noscript>このページはJavaScriptを利用しています。フォームの送信やリンク切れなどが発生します。JavaScriptを有効にしてご利用ください</noscript>

などと記載すべきです。この連載の趣旨から外れるので解説しませんが、CSSを利用してレイアウトに影響しないように表示することも簡単です。たったこれだけのことですが、行っていない大手Webサイトが少なくないのは残念です。

ユーザがデータを送信する前に入力ミスや入力形式が不正でないかチェックするために、JavaScriptを利用するのはユーザの利便性向上には非常に有用です。しかし、JavaScriptによるチェックはセキュリティ的には意味がありません。最終的な入力チェックは必ずサーバ側で行わなければなりません。クライアントサイドのチェックはセキュリティ的に意味がないことは、当たり前のよう認識されている、と考えられるかも知れません。しかし、大手が構築したWebサイトでもJavaScriptによる入力チェックやセキュリティチェックのみで、安全性がまったく維持できていなかった例は少なくありません。

対策のまとめ

  • JavaScriptが無効であっても最低限のナビゲーションが可能にする
  • JavaScriptが無効な場合、ナビゲーションや機能に支障がある場合ページに表示する
  • JavaScriptによるセキュリティチェックはセキュリティチェックとならないものとして取り扱う

おすすめ記事

記事・ニュース一覧