路由器帳戶管理實現

火星人 @ 2014-03-04 , reply:0


路由器帳戶管理實現

最近有這樣個需求,在ARM9+linux下跑的AppWeb(mini-apache) 來做一個類似路由器web管理的web server。本來appweb帶有Digest Auth,但是在源代碼里沒實現用戶密碼的修改,登陸註銷等功能,只提供了一個用於修改密碼的工具(binary文件)。使用CGI C程序調用這個工具,我已經實現了密碼的修改,但不知道現在怎麼實現用戶的登陸註銷。

    現在想知道:像路由器,交換機這些web server的登陸,註銷,帳戶管理等功能,是用設計web page的腳本語言(CGI,ASP,PHP)實現的, 還是用web server自帶的訪問控制(Digest認證)實現的?
《解決方案》

Websever 提供的認證無法實現注消, 要實現注消息需要 Session 機制.
同時利用 webserver 提供的摘要認證方式在應用中還有其它許多局限性, 一般應用都自己腳本語言實現. 方法:
(1) 伺服器隨機生成摘要串 (如用 session 生成一個隨機串).
(2) 瀏覽器用 JS 將摘要和密碼一起完成 HMAC-MD5 加密, 將密文傳送給伺服器.
(3) 伺服器驗證.
如下是一個簡單的示例:


<html>
<head>
<title>Authentication Demo</title>
<script type='text/javascript' src="/md5.js"></script>
<script type='text/javascript'>
<!--
/* reference: http://www.eybuild.com */
function encrypt() {
    var encrypted=hex_hmac_md5(f.pswd.value, "<% =sessid %>");
   
    f.pswd.value = "";
    f.digest.value = encrypted;
}
-->
</script>
</head>
<body>
Input passward:
<form name="f" action="" method="post" onsubmit="encrypt()">
    <input type="hidden" name="digest" value="">
    用戶名: <input type="text" name="user"><br>
    密&nbsp;&nbsp;碼: <input type="passwd" name="pswd"><p>
    <input type="submit" name="login" value="login"><br>
</form>
<% @b
    char        errmsg = "";
    char        sessid = "";
    char        dst = "";
    char *      pusr = G("user");
    char *      pswd = G("digest");
   
   
    if (!strissp(G("login")))
    {
        if (!strcmp(pusr, "user"))
            pusr = "user";
        else if (!strcmp(pusr, "admin"))
            pusr = "admin";
        else if (!strcmp(pusr, "root"))
            pusr = "root";
        else
            pusr = "unknown";
            
        if (!strcmp(pswd, HMAC_MD5Hex(dst, getsession("pswd"), pusr)))
        {
            strcpy(errmsg, "Login OK");
        }
        else
        {
            sprintf(errmsg, "Invalid passwd: %s", pswd);
        }
    }
   
    ebMakeSessID(sessid, 16);
    setsession("pswd", sessid);
%>
<p><b><% =errmsg %></b></p>
</body>
</html>


修改用戶賬戶, 設計一個頁面提交下修改之, 即可.
可參考: http://www.eybuild.com/develop/bbr.htm

Good Luck!
《解決方案》

Websever 提供的認證,能夠管理哪些目錄只有在登陸厚才能夠被訪問,我不清楚腳本語言,不知道能不能通過這些JS腳本語言也能實現上述功能?



[火星人 via ] 路由器帳戶管理實現已經有102次圍觀

http://www.coctec.com/docs/service/show-post-32302.html