Webプログラミングとセキュリティ(個人的備忘録)

September 29, 2008 – 1:56 pm

動的Webサイトの構築に向けて、Web上で関連情報を探索していると、知らなかった技術、動きに気づかされる。ここらで気づいたことを少しまとめておくことにした。いろいろなWebサイトを参照させてもらって、「安全」な動的なWebサイトを作ろうとするうえで、最低限、注意しておかなければならないと感じたことをメモしておいた。

入力値は必ずサーバ側でチェック: WWWブラウザ上で、フォームなどを通じて、ユーザによる入力値のチェックは必ずサーバ側で行うべき。

WWWブラウザから送られてくるデータはいくらでもユーザの都合のよいように書き換えができるから、そのデータにいかなる前提も成り立たない。WWWサーバ側プログラムはWWWブラウザからどんなパラメタを与えられた場合でも誤動作しないよう注意深く設計する必要がある。

インターネットの通信環境が良くなった今、クライアントWWW上にスクリプトを走らせる必要が小さくなってきたことを考えると、全てWWWサーバ側で行うのは当然の流れだろう。

Webページと認証: Webサイトを構築しようとすると、当然ながら、なんらかのユーザ認証の仕組みを取り込むことは不可欠だ。ユーザ認証は、ユーザIDとパスワードによるコントロール。一般的な方法はログイン画面の実装ということになるだろう。ログイン画面の実装における注意点について、

ユーザ認証の仕組みがはたらくのが実は「ユーザーログインページ」を通過するときだけ、・・・・ログイン画面だけでなく、各ページへの無許可アクセスを遮断する仕組みが必要である。また、ユーザIDのような重要なデータをクエリストリングに含めて受け渡すのは問題。・・・・Webアプリケーション実行環境が提供するセッションメカニズムを利用するとよい。

とされる。さらにセキュリティを高めるには、SSL、電子証明書などの使用が勧められている。我が「蔵書管理システム」用のログイン画面を作成してみようと作業を進めている。SSL,電子証明書あたりは、我がシステムに導入するには少し敷居が高いのではと思う。

SQLコマンドインジェクション: 入力値のサーバ側チェックということに繋がるが、SQLコマンドインジェクション対策は重要だ。

SQLコマンドインジェクション攻撃とは,引数などのパラメタにSQL文を混ぜ込んでおき(インジェクション),プログラム内部でそのSQL文を実行させてしまう攻撃手法・・・・。 これを避けるには、入力データが不正な働きをするおそれがあるものかどうかをチェックすることが重要。特に、「;」(セミコロン)や「‘」(シングルクォート)に用心。

データベースとファイルの保護:  DBあるいは各種ファイルの保護対策、さらには、各種ファイルの保護はセキュリティ上欠くことができない。

  • 重要情報(DBアカウントのパスワードなど)はWeb公開ディレクトリ階層の外に配置する。・・・・重要な情報はWeb公開ディレクト リ階層の外にファイルを準備し,そのファイル中に入れておくことで,情報漏洩の危険性を緩和することができる。
  • データベースのアクセス権は制限すべき。アクセス権が必要以上に与えられているデータベースアカウントを用いてアプリケーションを動かしていると,不正アクセスを許してしまったとき情報の漏洩だけでなくデータベースへの不正書き込みまで行われてしまう危険性がある。
  • DBMS管理者アカウントはWebアプリケーションでは使用してはならない。必ずアプリケーション用のアカウントを作成し,そのアカウントを使うようにする。
  • 公開ディレクトリには余計なファイルを置かない。作業時に作成したバックアップファイルなどに重要情報が残ったままになることが多い。不必要なファイルを公開ディレクトリに置いてはならない。

こうやってメモを作っていると思い当たることがある。構築中の我がサイトについて、公開前に点検をしておこう。

参考にしたサイト:
    IPA:「セキュア・プログラミング」など


  1. 1 Trackback(s)

  2. Aug 19, 2009: PHPのセキュリティを高めるための個人的メモ | Yama's Memorandum

Post a Comment