使用HTTP身份验证自动登录GreaseMonkey脚本

时间:2020-03-05 18:49:09  来源:igfitidea点击:

我在工作中编写了很多GreaseMonkey脚本,这些脚本会自动将我登录到我们在此处提供的内部站点中。除了我们的时间表应用程序使用HTTP身份验证之外,我几乎已经为这些站点中的每个站点编写了一个脚本。

有什么方法可以使用GreaseMonkey自动将我登录到该网站吗?

编辑:我知道浏览器中的商店密码功能,但是我的脚本更进一步,方法是检查网站加载时是否登录到网站(通过遍历HTML),然后将帖子提交到登录页面。这省去了加载网站,进入登录页面,输入我的凭据然后点击提交的步骤。

解决方案

回答

为什么不使用Firefox(我假设我们使用的是Firefox)通过密码管理器记住凭据?

我找到了此链接:HTML表单的HTTP身份验证。看起来我们可以使用javascript进行HTTP身份验证。我不认为当我们第一次导航到URL时,我们会遇到Greasemonkey中断。我们可能需要设置某种启动点,可以使用该启动点使滑脂猴子自动重定向+登录。例如,我们可以让本地页面在查询字符串中使用目标URL,让Greasemonkey自动执行身份验证+重定向。唯一的问题是,我们必须将用作启动点的书签的站点书签包装在启动页面中。

回答

HTTP身份验证信息是针对每个请求发送的,而不仅仅是登录。第一次登录后,浏览器将缓存会话的登录信息。因此,通过尝试检查我们是否已经登录,我们实际上并没有保存任何东西。

我们也可能完全忘记了lublessmonkey,只是像这样在URL上输入登录名:

http://username:password@host/

当然,将其保存在书签中可能会带来安全风险,但不会比在浏览器中保存密码大。

回答

通过设置" Authorization" HTTP标头,可以使用HTTP身份验证登录,此标头的值设置为字符串" basic username:password",但字符串的Base64编码的" username:password"部分。

http://frontier.userland.com/stories/storyReader$2159

一些研究发现,GreaseMonkey内置了一个功能,我们可以在其中将GET / POST请求发送到名为GM_xmlhttpRequest的服务器。

http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html

因此,将它们放在一起(并获得此JavaScript代码以将字符串转换为base64,我得到了以下内容

http://www.webtoolkit.info/javascript-base64.html

var loggedInText = document.getElementById('metanav').firstChild.firstChild.innerHTML;
if (loggedInText != "logged in as jklp") {
    var username = 'jklp';
    var password = 'jklpPass';
    var base64string = Base64.encode(username + ":" + password);

    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://foo.com/trac/login',
        headers: {
            'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.3',
            'Accept': 'application/atom+xml,application/xml,text/xml',
            'Authorization':'Basic ' + base64string,
        }
    });
}

因此,当我现在访问该站点时,它遍历DOM,如果我没有登录,它将自动登录。

回答

" http:// username:password @ host /"在IE上不起作用,FireFox可以正常工作。