アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » なぜPHPアプリにセキュリティホールが多いのか? » 補講 » 【スクリプトインジェクション対策17】パスワードを正しく管理する

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

【スクリプトインジェクション対策17】パスワードを正しく管理する

言うまでもなくパワード管理はセキュリティ上非常に重要な管理項目です。十分な安全性が確保できるよう配慮しなければなりません。しかし,大手サイトであっても適切とは言いがたい管理が行われている場合も少なくありません。

平文のパスワードをサイトの管理画面から参照できるのは論外です。決して行ってはならない行為です。パスワードを参照できるようにしてしまうと,スクリプトインジェクション等でセッションをハイジャックされると,攻撃者がパスワードを盗み読み,恒久的に成りすましが可能になります。さすがに平文パスワードが表示されるサイトは少数だとは思いますが,このような実装は決して行わないようにしてください。

多くのユーザは複数のサイトで同じユーザ名とパスワードを利用しています。パスワードが漏洩すると自分管理しているサイトのサービスのみでなく,ユーザが利用しているほかのサイトのサービスにも影響すると考えるべきです。しかも,ほとんどのWebサイトはパスワードの有効期限を設定していません。一度パスワードが漏れると少なくとも何年間もの間,第三者に成りすまされアカウントを不正利用される可能性があります。

この連載でも解説しましたが,SQLインジェクションを完全に防ぐのは容易です。すべてエスケープするかすべてのクエリにプリペアードクエリを利用すればSQLインジェクションは防げます。しかし,万が一SQLインジェクションに脆弱であってもパスワードが盗まれることを防ぐため,パスワードは暗号化したもののみを保存すべきです。データベースサーバ本体やデータ自体を厳重に管理していても,パスワード自体はシステム管理者でも判らない状態にするのが基本です。

パスワード等の保存にはSHA1ハッシュ関数を利用することが一般的ですが,単純にSHA1でハッシュ化すると辞書攻撃に脆弱になってしまいます。これでは万が一,SQLインジェクションなどでハッシュ値として保存したパスワードが漏洩すると,辞書攻撃に脆弱なパスワードがクラックされてしまいます。

辞書攻撃を防ぐにはパスワードと固定のランダム文字列(salt)を一緒にハッシュ化します。ハッシュ化したパスワードとslatとなるランダム文字列が一緒に盗まれると,簡単にフルートフォース攻撃でクラックされるパスワードも少なくないでしょう。saltはベータベース以外の場所(通常はファイル)に出来る限り秘密を維持できるように保存しておきます。パスワードは8文字以上で辞書攻撃に強いパスワードを設定するようユーザには勧めるべきです。

slatを利用すれば,仮にデータベースのデータのバックアップが紛失するような事故があっても辞書攻撃によりパスワードがクラックされるリスクを軽減できます。

対策のまとめ

  • 平文のパスワードは決して保存しない
  • パスワードは必ずハッシュ化して保存
  • 可能であればslat付きでハッシュ化
  • パスワード変更は登録時に設定したメールに変更用のURLを送付
  • Web UIでパスワード変更を許可する場合,現在のパスワードを聞かない(フィッシング防止)
  • Web UIでパスワード変更を許可する場合,別の秘密情報(質問と答えのセット等)を利用する
  • ユーザが推測不可能なパスワードを設定するように勧める
  • できればパスワードの有効期限を設定して定期的にパスワードの更新を勧める

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書

  • Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

    Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?

  • [改訂版]PHPポケットリファレンス

    [改訂版]PHPポケットリファレンス

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

使ってみよう! Windows Live SDK/API

Windows Liveサービスの一部にはAPIやSDKとして提供されているものがあります。本連載では各API・SDKの紹介とそれらを利用したアプリケーションを開発していきます。

Lifelog~毎日保存したログから見えてくる個性

コンピュータを使って,日常のさまざまなことの記録(ログ)をとり,それを分析して活用することで,もう一段階上の「楽な生活」をめざす日々の研究報告です。

もっと便利に!jQueryでラクラクサイト制作(実践サンプル付き)

本連載では,実践サンプルとともに,jQueryを上手に活用してサイト制作の品質向上・効率化を実現するための実践テクニックを解説します。

Ruby Freaks Lounge

Rubyに関わる,執筆者自身の旬なテーマを扱った,リレー形式の連載です。

これでできる! クロスブラウザJavaScript入門

JavaScriptはウェブ制作において避けては通れない重要な言語ですが,JavaScriptに苦手意識を持たれている方は少なくないようです。 その最大の原因がクロスブラウザ対応という課題であり,本連載ではクロスブラウザ対応のテクニックを詳細に解説します。

ビジネスで成功するためのシステム運用管理のポイント

システムの多様化,技術進歩に伴い,ITシステムの運用管理の必要性が年々高まっています。本連載では,システムの運用管理とは何かについて,現場のニーズと具体的な指針を押さえながらを解説します。

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス