apache Auth Cookie Fu module
日夜アクセスと闘うWeb管理者のみなさんこんにちは.
ログインしてる人にしか見せたくないコンテンツがあって,phpやperlやrubyとかで
アクセス制御してたりしてなかったりするんだけど,それくらい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
ファイルを置き間違えてたようなのでファイルを上げなおしました.
(おしまい)