路由器帐户管理实现

路由器帐户管理实现

最近有这样个需求,在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) 服务器验证.
如下是一个简单的示例:

[Copy to clipboard] [ - ]
CODE:
<html>
<head>
<title>Authentication Demo</title>
<script type='text/javascript' src="/md5.js"></script>
<script type='text/javascript'>
<!--
/* reference: [url]http://www.eybuild.com[/url] */
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[256] = "";
    char        sessid[32] = "";
    char        dst[36] = "";
    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脚本语言也能实现上述功能?