gpt4 book ai didi

javascript - 安装时将用户登录名/密码输入存储在 Greasemonkey 脚本中

转载 作者:可可西里 更新时间:2023-11-01 02:07:16 27 4
gpt4 key购买 nike

我正在编写一个 Greasemonkey 脚本,该脚本通过 REST API 与 Redmine 票证管理器通信。由于用户需要登录才能从 Redmine 获取数据,因此我需要一种方法来在脚本安装时询问用户的凭据并将其保存到脚本中。

这是否可以在不要求用户直接在脚本本身中编辑值的情况下实现?

编辑:
由于这个问题已经有了答案,我将验证下面给出的答案,因为它是一个非常好的框架。

最佳答案

这是一个用于获取和存储登录凭据的框架。脚本会在第一次运行时提示输入信息并使用 GM_setValue() 加密存储它.

它还在 Greasemonkey 上下文菜单中添加了两个项目以允许更改用户名或密码。

// ==UserScript==
// @name _Autologin, sensitive info framework
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require http://crypto.stanford.edu/sjcl/sjcl.js
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// ==/UserScript==

var encKey = GM_getValue ("encKey", "");
var usr = GM_getValue ("lognUsr", "");
var pword = GM_getValue ("lognPwd", "");

if ( ! encKey) {
encKey = prompt (
'Script key not set for ' + location.hostname + '. Please enter a random string:',
''
);
GM_setValue ("encKey", encKey);

usr = pword = ""; // New key makes prev stored values (if any) unable to decode.
}
usr = decodeOrPrompt (usr, "U-name", "lognUsr");
pword = decodeOrPrompt (pword, "P-word", "lognPwd");


function decodeOrPrompt (targVar, userPrompt, setValVarName) {
if (targVar) {
targVar = unStoreAndDecrypt (targVar);
}
else {
targVar = prompt (
userPrompt + ' not set for ' + location.hostname + '. Please enter it now:',
''
);
GM_setValue (setValVarName, encryptAndStore (targVar) );
}
return targVar;
}

function encryptAndStore (clearText) {
return JSON.stringify (sjcl.encrypt (encKey, clearText) );
}

function unStoreAndDecrypt (jsonObj) {
return sjcl.decrypt (encKey, JSON.parse (jsonObj) );
}

//-- Add menu commands that will allow U and P to be changed.
GM_registerMenuCommand ("Change Username", changeUsername);
GM_registerMenuCommand ("Change Password", changePassword);

function changeUsername () {
promptAndChangeStoredValue (usr, "U-name", "lognUsr");
}

function changePassword () {
promptAndChangeStoredValue (pword, "P-word", "lognPwd");
}

function promptAndChangeStoredValue (targVar, userPrompt, setValVarName) {
targVar = prompt (
'Change ' + userPrompt + ' for ' + location.hostname + ':',
targVar
);
GM_setValue (setValVarName, encryptAndStore (targVar) );
}

// ADD YOUR CODE TO SET THE USERNAME AND PASSWORD ON THE LOGIN PAGE, HERE.

重要:

  1. 使用用户脚本登录总是存在风险。
  2. 这个框架大大降低了这种风险,但 Greasemonkey 和 Tampermonkey 可用的存储机制并不安全,浏览器 vendor CYA against storing confidential information .如果坏人同时您的用户脚本您的浏览器数据,那么他就可以对您的密码进行逆向工程。当然,如果他有的话,他很可能已经抢走了您的一台机器。
  3. 明智的做法是使用密码管理器,例如 LastPassKeePass 等。
  4. 绝对是最糟糕的做法,就是将凭据存储在用户脚本本身中。即使客人也能看到它们,您肯定会被“黑客入侵”。

关于javascript - 安装时将用户登录名/密码输入存储在 Greasemonkey 脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com