Memorizzazione dell’accesso utente / password in uno script Greasemonkey al momento dell’installazione

Sto facendo uno script Greasemonkey che comunica con il gestore ticket di Redmine tramite l’API REST. Poiché l’utente deve effettuare il login per ottenere i dati da Redmine, ho bisogno di un modo per chiedere all’utente le sue credenziali durante l’installazione di script e salvarle nello script.

Questo può essere ottenuto senza chiedere all’utente di modificare i valori direttamente nello script stesso?

MODIFICARE:
Dato che c’è già una risposta a questa domanda, convaliderò la risposta data appena sotto poiché è un ottimo framework.

    Ecco un framework per ottenere e archiviare le credenziali di accesso. Lo script richiede le informazioni alla prima esecuzione e lo memorizza, crittografato, utilizzando GM_setValue() .

    Aggiunge anche due voci al menu di scelta rapida di Greasemonkey per consentire la modifica del nome utente o della password.

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

    Importante:

    1. L’accesso con un userscript comporta sempre dei rischi.
    2. Questo framework riduce notevolmente tale rischio, ma i meccanismi di archiviazione disponibili per Greasemonkey e Tampermonkey non sono sicuri e i fornitori di browser CYA contro la memorizzazione di informazioni riservate . Se un malintenzionato riceve sia il tuo codice utente che i dati del tuo browser, allora può decodificare la tua password. Ovviamente, se lo possiede, probabilmente ha pwnato comunque una delle tue macchine.
    3. La cosa intelligente da fare è usare un gestore di password come LastPass , KeePass , ecc.
    4. La cosa peggiore in assoluto è archiviare le credenziali in un userscript stesso. Anche un ospite può vederli e sarai “hackerato”, garantito.