2013-06-20 85 views
1

我需要使用XQuery將用戶登錄到eXist-db。當然,我可以使用此代碼:使用MD5密碼將用戶登錄到eXist-db(XQuery)

xquery version "3.0"; 

declare namespace exist = "http://exist.sourceforge.net/NS/exist"; 
declare namespace request="http://exist-db.org/xquery/request"; 
declare namespace xmldb="http://exist-db.org/xquery/xmldb"; 
declare option exist:serialize "method=json media-type=text/javascript"; 

let $userName := request:get-parameter("userName",()) 
let $hash := request:get-parameter("hash",()) 
let $login := xmldb:authenticate('/db', $userName, $hash) 
return 
    <ajax-response> 
     <success>{$login}</success> 
     <username>{$userName}</username> 
    </ajax-response> 

的問題是,由於我收到的密碼,並從其他服務的用戶名的事實,我收到他們用MD5(加密哈希形式,因爲他們能夠」通過服務清楚地傳遞給另一個服務)。

xmldb:authenticate函數需要清除密碼。我該如何解決這個問題?任何想法?有沒有辦法在eXist-db中手動登錄而不使用authenticate函數?

回答

1

不,這是不可能的:eXist-db無法在認證功能上使用散列,因爲MD5不安全,所以存在安全風險。另外,eXist-db在內部不使用MD5來散列密碼,所以驗證密碼將會很困難(匹配兩種不同的散列技術是不可能的)

不幸的是,沒有辦法用標準函數來解決這個問題。

+0

那麼它在內部使用SHA?或河豚?它使用什麼? –

+0

我現在找到了信息。現存的1.4X確實使用了MD5。較新的版本使用RIPEMD-160。所以如果你從其他服務中獲得這種格式的哈希,你會沒事的。 –