konekto Inc with PHP , MySQL コネクト株式会社 技術情報コンテンツ


セキュリティ指針

URLに秘密にしておくべき情報を入れない

説明

URLは、通信上、比較的ログに残りやすい情報である。また、SSLを使用し暗号化通信を行ったとしても、URLに表示されている文字列は暗号化されない。 ログとはWebサーバのログ、プロクシサーバのログ、リファラ情報などのことである。

被害例

  • その1
    <FORM  action="login.php" method="get">
        ユーザ名:<INPUT name="username" type="text">
        パスワード:<INPUT type="password" name="password">
        <INPUT type="submit" name="ログイン">
    </FORM>
    上記のようなGET情報で、ログインするようなページが存在したとする。 このページを利用してブラウザ上に表示されるURLは次の通りである。
    http://exsample.com/login.php?username=zend&password=userpassword
    上記URLでページにアクセスしたことは、ProxyやWebサーバ、またはこの後、知らない人のページに移動した場合、ブラウザによっては、リファラ情報を他のサーバに保存することになる。 その場合、ユーザ名やパスワードが外部へ漏洩することとなる。
  • その2
    セッション情報を次のような形で保持している場合にも、上記と同様の問題が存在する。
    http://exsample.com/login.php?SID=K23LF90SDKLAJ34QU4J124KL
    この場合セッション情報が外部から洩れてしまうため、場合によっては、ユーザ名やパスワードをスルーして、秘密情報にアクセスできてしまう可能性がある。

対策

  • その1
    機密情報は、POSTメソッドもしくはCookieでやり取りする。 POSTやCookieであれば、機密情報はログには残りにくい。*1 またSSLで暗号化を行えば、パケットスニファリングなどでも情報は取れなくなる。
  • その2
    Cookie及び、Post以外の、セッションの受け渡しは許可しない。 PHP上では次の項目の設定を行うことにより透過的なセッションを無効とする。
    session.use_trans_sid=0

*1 ただし、パケットスニファリングをされた場合には、情報は閲覧可能

最終更新のRSS