WebアプリやWebサービスは手軽であるために多くの利用者がいますが、外部に対して公開されている以上、悪意をもってアプリやサービスに攻撃が行われる場合もあります。
Webアプリやサービス、そして利用者をサイバー攻撃から守るために、アプリやサービスの開発側で行うべきことを紹介します。
Webアプリやサービスで生じやすい脆弱性
Webアプリやサービスではさまざまなトラブルが発生しますが、特に生じやすい脆弱性についてはセキュリティに直接関わらないとしても知っておきましょう。
SQLインジェクション
お問い合わせフォームなどに悪意のあるSQL文を挿入する攻撃で、意図しないコマンドが実行されたり、データへの不正なアクセスが行われます。
セッションハイジャック
個人のWebページの利用を追跡するためのセッションの仕組みを利用し、他人に成りすましてログインが必要なページを閲覧したり、操作を行う攻撃です。
クロスサイトスクリプティング
ブラウザ上でスクリプトを実行し、セッションハイジャックやwebサイトの改ざん、悪意のあるサイトへのリダイレクト(転送)などを行う攻撃です。
オブジェクト直接参照
サーバーにアップされているデータやオブジェクトを直接参照します。
適切なアクセス権限や公開範囲が設定されていない場合に生じます。
クロスサイトリクエストフォージェリ
ユーザからの正当なリクエストとして認識されるようなリクエストをブラウザに生成させ、ブラウザの利用者(=被害者)が意図しない処理を実行させる攻撃です。
Webアプリやサービスにおけるセキュリティの基本テクニック
上記のようなトラブルを防ぐための基本的なテクニックの概要を紹介します。
通信の暗号化
WebアプリやWebサービスは、クライアント(利用者)とサーバー(サービス提供側)における情報のやり取りによって機能します。
両者の間で通信が行われることで処理や表示が行われますが、この通信の過程で攻撃者の侵入が生じます。
通信方法をSSLで暗号化することで盗聴や改ざんを予防できます。
特殊記号をエスケープする
SQLインジェクションやクロスサイトスクリプティングなどの攻撃は、ブラウザで表示される入力フォームや通信におけるリクエスト情報に、<script>のタグや、プログラムが入力データを識別するための「’」や「;」といった記号が不正に入力されることで生じます。
これらをエスケープ(別の文字列への置き換え)をする仕組みを備えることで対策を施します。
開発用のフレームワークにはこうした機能が標準で設定されているものが多いです。
入力規則によるサニタイズ(無害化)
挿入される情報に入力規則を設け、不正な入力を防ぐと共にスクリプトが機能しないようにする方法も有効です。
<a href=””>ならhrefに入力できる内容は「http」あるいは「https」から始まるようにする、<script>タグが機能しないように「<」「>」を「<」「>」の表記にエスケープするなどの方法があります。
CookieやセッションIDのランダム生成
個人の通信の状況を識別するためのCookieやセッションIDが一定の規則のもとで発行されていれば、知識のある人であれば簡単に他の人になりすましてサービスにアクセスできます。
そのため、これらをランダムで生成したり、使用できる期間を短くして再発行させるなどの対策をとります。
WAFを利用する
WAFはwebアプリケーション用のファイアウォールで、不正な通信や振る舞いを検知してアクセスを遮断するための装置です。
物理的に装置を設置する場合もありますが、最近はクラウドでサービスが提供されているものもあります。
Webアプリやサービスのセキュリティは多層防御が鉄則
Webアプリやサービスにおけるセキュリティ対策は、実にさまざまな要素を含んでおり、ひとつの方法で完全な防御ができるわけではありません。
いわゆるセキュリティソフトと言われているソフトも、現在はウイルス対策だけではなく、不正なデータの入出力の検出や、ファイアウォール機能、不正プログラムの動作の検出などさまざまなセキュリティ技術が複合的に提供されています。
Webアプリやサービスにおいては、サービスを提供するサーバーのセキュリティを固めるだけでなく、ユーザーとのやり取りに必要な通信(ネットワーク)におけるセキュリティや、ユーザー側での操作における入力情報からのトラブルを防ぐための仕組みも必要です。
また、問題が発生した場合に備え、重要なデータはなるべく公開されているサーバー上に残さないようにしたり、侵入を許したアカウントの特定やロックができるようにするなどアカウントの管理や、ファイルやディレクトリに対するアクセス権限の適切な設定などサーバー管理も大切になります。
当然、OSやセキュリティソフト、各ソフトは脆弱性に備えて最新の状態を保つことが必要不可欠です。
Webアプリやサービスを安全に提供するためには、多層的なセキュリティ対策を考えて実装していくことが大切で、全体を俯瞰してどこにどれだけの対策を施すべきかをよく考えましょう。
Webアプリ・Webサービスのセキュリティ対策まとめ
Webアプリやサービスは外部に公開されている分、攻撃を受けやすい側面があります。
サービスの利用を便利にするためのさまざまな機能が悪用されることで大きなトラブルになりますので、ポイントをしっかりと押さえて基本的な対策を施しましょう。
セキュアなプログラミングだけでなく、ネットワークやサーバーなどのセキュリティも考慮して、多層的な対策を行うことが大切です。