2013-06-20 87 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。所以如果你从其他服务中获得这种格式的哈希,你会没事的。 –