rails:3234
From: しん <dezawa@a...>
Date: Fri, 02 Oct 2009 17:22:35 +0900 (JST)
Subject: [rails:3234] LDAPユーザ認証でのパスワード隠蔽方法
出沢です
この話題はRoRからははずれ気味ですが、この場にはWebアプリに強い方が沢山
いらっしゃるであろうことと、解決はRoRで行いたいこともあり、ここで相談
させていただきます。
申請システムを作っています。ユーザ認証にRestfull-authenticationを使いました。
システム上権限を持つ人の管理はローカルのmodel Userでやるのはやむをえないの
ですが、一般ユーザの認証はLDAPで行いたく、ruby-ldap を利用して改造しました。
一通り動いたのですが、セキュリティ上不安な問題に気がつきました。
それはLDAPの生のパスワードを手に入れることができてしまうということです。
生のパスワードを知ることなしに、LDAPでの認証を行う方法がありましたら教えて
ください。
LDAP認証は bind(dn,password) が例外を出さなければ成功 と判断しています。
LDAPサーバは社の事情から MSのActiveDirectoryサーバと(メーカ、商品名未確認な)
CorporateDirectoryの2系統があり、次の優先順で問い合わせています。
CDに問い合わせ ⇒ ADに問い合わせ ⇒ model Userに問い合わせ
Webの画面は Restfull をinstall したときに作られる views/sessions/new を
手直しして使っています。
LDAPへの問い合わせは枝葉を取ると以下です。
conn = LDAP::Conn.new(server, 389)
conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
begin
# CDはパスワード無しを通してしまう
raise 49 if password.blank?
conn.bind(dn,password)
rescue => evar
# 失敗の型を返す必要あるか? あったらflashするか、
return nil
end
パスワードと dn作成のための uid はRestfullのオリジナルのままです。
すなわち、views/sessions/new から sessions_controller/create に渡り
そこで User.authenticate(params[:login], params[:password]) で渡されます。
環境は Rails 2.3.2、Ruby1.8.7、LinuxRH9 です。
よろしくお願いします
--
ML: rails@r...
使い方: http://QuickML.com/
-> 3234 2009-10-02 10:22 [dezawa@a... ] LDAPユーザ認証でのパスワード隠蔽方法 3239 2009-10-07 05:22 ┗[bsdmad@g... ] 3242 2009-10-07 07:52 ┗[dezawa@a... ]