Сохранение входа пользователя / пароля пользователя в сценарии Greasemonkey при установке

Я выполняю сценарий Greasemonkey, который связывается с менеджером билетов Redmine через REST API. Поскольку пользователю необходимо войти в систему, чтобы получить данные от 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. Вход в систему с помощью usercript всегда несет риск.
    2. Эта структура значительно снижает этот риск, но механизмы хранения, доступные для Greasemonkey и Tampermonkey, не являются безопасными и браузерами CYA для хранения конфиденциальной информации . Если плохой парень получит как ваш учетный текст, так и данные вашего браузера, он сможет перестроить ваш пароль. Конечно, если у него есть это, он, скорее всего, все-таки заработает одну из ваших машин.
    3. Умная вещь – использовать менеджер паролей, такой как LastPass , KeePass и т. Д.
    4. Самое худшее, что нужно сделать , – хранить учетные данные в самом пользовательском документе. Даже гость может их увидеть, и вы будете «взломаны», гарантированы.
    Interesting Posts

    Как настроить удаленный домашний каталог на Mac OS X?

    Использование нескольких версий одной и той же библиотеки DLL

    Самый эффективный способ создания сетей на Mac / iPhone?

    Как создать веб-галерею в офлайн-режиме? (Без php на сервере)

    Воспроизвести фильм с Windows Media на DLNA TV: «не удалось получить информацию о медиа с медиа-сервера»

    Метод onDraw () расширенного SurfaceView никогда не вызывал

    Как извлечь список служб Windows и их статус в текстовый файл?

    Java: разные двойные и двойные в сравнении

    Можно ли изменить расположение пакетов для NuGet?

    Шпатлевка: обновить экран VIM

    ASP.NET MVC – привязка объекта типа «MODELNAME» не удалась, поскольку другой объект того же типа уже имеет такое же значение первичного ключа

    Использование GSON для parsingа JSON с динамическим «ключом» и «значением» в android

    Force R не использовать экспоненциальную нотацию (например, e + 10)?

    Как разрешить анонимному пользователю доступ к какой-либо заданной странице в MVC?

    Как найти Waldo с Mathematica?

    Давайте будем гением компьютера.