5

对于初学者; 我在编码方面不太识字。

我对如何在特定目录或站点上触发/或抛出基本/标准“需要身份验证”对话框的脚本以及用户将在那里输入的凭据非常感兴趣,以针对另一个数据库进行检查网站。

即,就像那些“检查谁在 msn 上阻止了你”网站一样,他们从他们的网站获取你的凭据,然后他们检查 Hotmail 数据库或服务器,并告诉你凭据是否不正确(重试)或者它是否正确,它会将你重定向到由管理员实施的特定网站。(在这种情况下 Hotmail 联系人列表)

而且当它检查凭据是否正确时,我如何使脚本将这些凭据存储到特定的 .txt 文件或文件夹中?!

唯一的区别是我只希望它是像这里示例这样的基本身份验证对话框但我希望在我的网站上实现它。

我希望我可以理解。

非常感谢您提前。

4

2 回答 2

3

您需要向浏览器发送 401 响应代码,这将使浏览器提示输入用户名和密码。这是从PHP 手册中获取的 PHP示例:

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

您应该能够用您选择的语言做同样的事情,尽管您需要研究用户名和密码变量在您使用的语言中的存储位置。

作为替代方案,您也可以在 Web 服务器中进行配置。这样,Web 服务器处理身份验证,您只需对应用程序进行编程以获取通常在“REMOTE_USER”环境变量中找到的当前用户名。在 Apache 中,您可能会限制对特定文件夹的访问,如下所示:

<Directory /usr/local/apache/htdocs/secret>
    AuthType Basic
    AuthName "Restricted Files"
    # (Following line optional)
    AuthBasicProvider file
    AuthUserFile /usr/local/apache/passwd/passwords
    Require user rbowen
</Directory>

有关更多信息,请参阅有关身份验证和访问控制的 Apache 文档。即使您使用不同的 Web 服务器,请放心,这是 Web 服务器中的常见功能。我相信您将能够在您使用的任何 Web 服务器中找到等效的功能。

于 2011-01-31T01:28:41.740 回答
1

Java 导入已被排除...

要显示用户名/密码对话框...

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"My Realm\"");
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "");

要解码请求...

private boolean authenticateRequestOk(HttpServletRequest request)
{
    String authorizationHeader = request.getHeader("Authorization");

    if (authorizationHeader != null)
    {
        byte[] decodedUsernamePassword;
        try
        {
            decodedUsernamePassword = Base64.decode(authorizationHeader.substring("Basic ".length()));
        }
        catch (IOException e)
        {
            log.error("Error decoding authorization header \"" + authorizationHeader + "\"", e);
            return false;
        }

        String usernameAndPassword = new String(decodedUsernamePassword);

        String username = StringUtils.substringBefore(usernameAndPassword, ":");
        String password = StringUtils.substringAfter(usernameAndPassword, ":");

        if (USERNAME.equalsIgnoreCase(username) && PASSWORD.equalsIgnoreCase(password))
        {
            return true;
        }
    }

    return false;
}
于 2011-02-01T05:15:51.797 回答