読者です 読者をやめる 読者になる 読者になる

apache Auth Cookie Fu module

日夜アクセスと闘うWeb管理者のみなさんこんにちは.


ログインしてる人にしか見せたくないコンテンツがあって,phpperlrubyとかで
アクセス制御してたりしてなかったりするんだけど,それくらいapache側で対処
してくれよと日々悶え苦しむそんなアナタにapache Auth Cookie Fu module.

これはなに?


Cookieを使ってコンテンツのアクセスコントロールを行うモジュールです.
Cookieの評価後,コンテンツの拒否は指定された方法(redirect, forbidden)で
処理されます.なおCookieの焼き込みは自前で用意する必要があります.


module.jp小山さんのmod_auth_formとかなり似てますが,

  • apache2対応
  • コンテンツ拒否の方法を指定できる

などがウリです.

インストール

# apxs -i -a -c mod_auth_cookie_fu.c


####注意!!####
上記のコマンドはいきなりモジュールをインストールしてhttpd.confを
書き換えます(具体的には下記の行をhttpd.confに加えます).

LoadModule auth_cookie_fu_module modules/mod_auth_cookie_fu.so

ディレクティブ

ディレクティブは,のコンテキスト内で記述できます.

# auth_cookie_fu モジュールを利用可能にします(default off)
AuthCookieEnable on|off

# クッキーが不正だった場合の処理を指定します(default forbidden)
AuthCookieDenyAction forbidden|redirect

# リダイレクトURLを指定します
AuthCookieRedirectURL url_to_redirect

# IPアドレスをチェックするか指定します(default no)
AuthCookieCheckIP yes|no

# ExpireDateをチェックするか指定します(default yes)
AuthCookieCheckExpire yes|no

# Check用のCookie名を指定します (default 'ACF' ('AuthCookieFu'の略))
AuthCookieCookieName cookie_name

# 暗号用のキーを指定します(default '!Open Sesame!').適宜変更してください.
AuthCookieCookieSalt cookie_salt_for_hmac

# アクセスチェックをしないドメインをスペース区切りで指定します(未実装)
AuthCookiePermitedDomains domains_space_sparated

Cookieフォーマット


expire=unixtime&ip=AA.BB.CC.DD&digest=HMACHexDigest(Sha1)
Ex)
expire=1178442572&ip=192.168.1.9&digest=5719b9e205cc63d896184c79ced2dd35a3702c18

Cookieの焼き方


keyは適宜変更してください.

# for rails
class FooContoller < ApplicationController
  def cookie_write
    expire = Time.now.to_i+40*24*3600
    remote_ip = request.remote_ip
    key = '!Open Sesame!'
    plain_text = "#{expire.to_s},#{remote_ip}"

    cookies["ACF"] = sprintf("expire=%s&ip=%s&digest=%s",
                           expire,
                           remote_ip,
                           OpenSSL::HMAC::hexdigest(OpenSSL::Digest::SHA1.new, key,plain_text )
                           )
    render :text => "Cookie Write! #{plain_text}"
  end
end
ライセンス


Ruby on Railsと同じMITライセンスに従います.ただし私はライセンスに詳しくないので,これで不都合があるようでしたら連絡ください.

Special Thanks!


本モジュールはmodule.jp小山さんのmod_auth_formを大いに参考にさせてもらいました.

追記 2007/09/06

ファイルを置き間違えてたようなのでファイルを上げなおしました.


(おしまい)