2013-02-20 86 views
2

原諒我,如果這是一個愚蠢的問題。我不熟悉如何處理瀏覽器腳本。我的PC上可以看到我的Greasemonkey腳本嗎?

我正在寫一個簡短的Greasemonkey腳本,涉及將我自動登錄到網站,這當然涉及到插入我的密碼。我打算在腳本中加入我的密碼,但我擔心如果其他人能夠看到我的腳本,他們也會看到我的密碼。

所以我的問題是,我的腳本有可能被任何人/任何東西超出我的瀏覽器和本地PC嗎?我不是在談論其他人使用我的電腦,而是任何人「探測」或以其他方式從網上其他地方檢查我的瀏覽器。

如果是這樣,我如何存儲我的密碼,以便在不犧牲我的安全性的情況下自動插入密碼?

+1

https://lastpass.com/? – user113215 2013-02-20 02:58:52

+1

即使沒有人能夠看到它,一般也不是一個好主意。 – 2013-02-20 02:59:51

+0

@ user113215可以通過JavaScript插入Lastpass密碼嗎? – user2089518 2013-02-20 03:11:32

回答

2

名義上,沒有。 Greasemonkey腳本在您的PC之外不會比其他硬盤上未加密的文件更清晰可見。

這就是說,有幾件事情要記住:

  1. 使用密碼實用程序。
    使用旨在儘可能使用並保護密碼的可信實用程序。如前所述,LastPass非常受歡迎。我也用Secure Login效果很好。

    無可否認,這些實用程序不適用於任何情況,因爲許多網站堅持自己的登錄頁面/系統變體。所以,我個人使用Greasemonkey腳本登錄到一些低風險的網站。

  2. 切勿對敏感網站使用自動登錄功能。 如果您使用銀行,信用卡,重要的工作數據庫等的腳本有人有一天坐在你的電腦上,他們訪問該網站(並自動登錄),並且壞東西會發生。銀行就可以了。
    現在,我知道有些人會(愚蠢地)忽略這一點。但是,如果你這樣做了,至少要用熱鍵或熱鍵序列觸發登錄 - 永遠不要全自動。

  3. 當心unsafeWindow
    Greasemonkey腳本曾經容易受到針對unsafeWindow的攻擊。雖然我認爲此漏洞已由Firefox版本4(舊的漏洞利用配方肯定無法與現代GM + FF一起使用)關閉,但unsafeWindow漏洞利用將允許一個受損的網頁查看部分腳本源並使用GM_功能。

    因此,尤其對於登錄腳本,請勿使用unsafeWindow

  4. 千萬不要在任何源文件中包含真實密碼。
    不要讓窺視或惡意軟件很容易得到您的密碼!幾十年來,這一直是一條輕鬆的道路,但人們仍然可能因此而被燒燬 - 可能每天都有。

  5. 不要以明文形式存儲密碼。,並且不要使用「密碼」和「用戶名」作爲變量名稱。 這不會阻止一個確定的壞人,但它會減慢「誠實」的窺探和腳本小子。


這裏是Greasemonkey的腳本框架我兩頁,我自動登錄(都是論壇,低風險,低靈敏度)上使用。

用戶名和密碼存儲在瀏覽器首選項數據庫中(通過about:config可見),而不是腳本源。它們被輕度加密以減緩窺探。

第一次運行腳本時,它會提示輸入隨機密鑰和用戶名和密碼。之後,可以通過Greasemonkey上下文菜單更改用戶名和密碼。

// ==UserScript== 
// @name  _Autologin, sensitive info framework 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @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)); 
} 

/*-- These next 3 lines are for debug/edification. 
Remove or comment out of the final script. 
*/ 
console.log ("Script start."); 
console.log ("usr: ", usr); 
console.log ("pword: ", pword); 

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

你是console.log的用戶和密碼在普通的嗎? – 2013-02-20 11:38:31

+0

@JonasWielicki:是的,但這僅僅是爲了這篇文章的調試/教育目的。 – 2013-02-20 11:47:57

-1

是的,他們是!通過請求站點上腳本事件DOMNodeInserted的事件監聽器,您的源代碼(以及您的密碼)可以被請求站點上的所有腳本看到。

查看更多信息,請查看here

+0

這適用於Greasemonkey 0.3及更早版本,並且在12年前已修復。 – 2017-05-23 21:07:40