Speichern der Benutzeranmeldung / Passworteingabe in einem Greasemonkey-Skript bei der Installation

Ich mache ein Greasemonkey-Skript, das über die REST-API mit dem Redmine-Ticketmanager kommuniziert. Da sich der Benutzer anmelden muss, um die Daten von Redmine zu erhalten, muss ich den Benutzer bei der Installation des Skripts nach seinen Anmeldeinformationen fragen und diese im Skript speichern.

Kann dies erreicht werden, ohne dass der Benutzer aufgefordert wird, die Werte direkt im Skript selbst zu bearbeiten?

BEARBEITEN:
Da es bereits eine Antwort auf diese Frage gibt, werde ich die unten angegebene Antwort validieren, da es sich um einen sehr guten Rahmen handelt.

   

    Hier finden Sie ein Framework zum Abrufen und Speichern von Anmeldedaten. Das Skript fordert beim ersten Durchlauf zur Eingabe der Informationen auf und speichert sie verschlüsselt mit GM_setValue() .

    Es fügt dem Greasemonkey-Kontextmenü auch zwei Einträge hinzu, um den Benutzernamen oder das Passwort zu ändern.

     // ==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. 

    Wichtig:

    1. Die Anmeldung mit einem Benutzer-Skript birgt immer Risiken.
    2. Dieses Framework reduziert dieses Risiko erheblich, aber die Speichermechanismen, die Greasemonkey und Tampermonkey zur Verfügung stehen, sind nicht sicher und die Browser-Anbieter CYA dagegen, vertrauliche Informationen zu speichern . Wenn ein böser Kerl sowohl Ihre Userscript- als auch Ihre Browserdaten erhält, kann er Ihr Passwort zurückentwickeln. Natürlich, wenn er das hat, hat er höchstwahrscheinlich sowieso einen deiner Maschinen gepinselt.
    3. Das schlaue Ding ist, einen Kennwortmanager wie LastPass , KeePass , etc. zu verwenden.
    4. Das Schlimmste, was zu tun ist , ist das Speichern von Anmeldeinformationen in einem Benutzer-Skript selbst. Sogar ein Gast kann sie dann sehen und Sie werden garantiert “gehackt”.