2010-03-28 221 views
4

我遇到過Evernote's bookmarklet,想知道這是如何工作的。這個Bookmarklet如何讓你保持登錄到這個網站?

您可以將其拖動到您的書籤並轉到任何網頁,單擊該書籤,它將首先要求您登錄。我已經完成了所有這些工作,並知道它是如何工作的。

我不明白的一點是,當你登錄他們認證你並允許你提交的東西(在這種情況下,一個網站的網址等)。當你完成了在你正在查看的頁面上放置一個小覆蓋圖的小書籤消失。

當你去一個新的選項卡,並再次使用 書籤您仍然登錄 !怎麼樣?

我可以看到他們使用iFrame時,他們的小書籤加載到頁面的疊加 - 但他們設置cookie或什麼?如果是這樣,這是安全的嗎?任何人都可以更改這些值?或者他們是否使用某種私人/公共密鑰系統

順便說一句,我想用PHP/JavaScript(也許JQuery)複製這個Bookmarklet。如果有人能幫助我理解他們如何做到這一點,或者指向相關教程,我將不勝感激。

謝謝大家的幫助。

回答

3

對於初學者來說,這裏的書籤執行代碼:

(function(){ 
    EN_CLIP_HOST = 'http://www.evernote.com'; 

try{ 
    var x = document.createElement('SCRIPT'); 
    x.type='text/javascript'; 
    x.src = EN_CLIP_HOST + '/public/bookmarkClipper.js?' + (new Date().getTime()/100000); 

    document.getElementsByTagName('head')[0].appendChild(x); 

} catch(e) { 

    location.href = EN_CLIP_HOST + '/clip.action?url=' + encodeURIComponent(location.href) + '&title=' + encodeURIComponent(document.title); 
} 

})();

它的功能相對簡單。它試圖從Evernote站點獲取腳本,並向請求添加時間戳,以便始終提取新副本。如果成功,一堆JavaScript將被添加到頁面中,該頁面將構建一個iframe,從中可以顯示所有Evernote功能,然後iframe可以使用標準cookie等來確保您已登錄,然後處理您的請求。

catch塊是爲了防止動態腳本加載失敗,其中因爲你被重定向到Evernote網站,所以(我猜測)它可以從那裏剪輯內容。

要回答您仍然如何登錄的具體問題,您仍然登錄,因爲您的瀏覽器現在擁有Evernote站點的會話Cookie(www.evernote。因此,當iframe在第二個網站上打開時,這些cookie會隨之發佈,並且Evernote會識別您已登錄。使用Cookie幾乎是Web上會話的標準,所以它們沒有做任何特別的事情在這裏,我相信你可以搜索SO周圍基於cookie的會話的安全問題。

重點是iframe基本上就像打開一個單獨的窗口,只是它允許一些有限的數據由基頁傳遞給iframe,因此它知道你在哪個網站上。

希望有所幫助。

+0

@Bialecki - 謝謝你的回答,現在情況更加清晰。我剛剛注意到的另一個奇怪的事情是,當你通過書籤登錄並且你去了Evernote網站(沒有使用小書籤)時,你沒有登錄。所以我猜他們有兩個獨立的登錄處理程序,感。您是否認爲允許用戶登錄網站和小書籤的安全潛力無論他們從哪裏登錄? – Abs 2010-03-29 12:15:54

0

他們可能正在使用cookies。他們很可能用JavaScript打開一個iframe到他們網站上的一個php頁面,然後該網站會查找一個登錄cookie,如果它存在,網站會提取用戶信息並執行其操作。

只需要小心,您需要一種方法來驗證cookie不是由用戶創建的,以欺騙網站。我會將一個隨機字符串存儲在一個cookie中,並存儲在數據庫中(在用戶表中)。每當用戶登錄時創建隨機字符串。當用戶嘗試使用書籤時,比較兩個字符串,並且只允許在相同的情況下訪問,如果不相同,則刪除Cookie並要求用戶登錄。 。這確保了攻擊者不能僅僅使用用戶的ID創建cookie並接管他們的賬戶(攻擊者需要隨機字符串,生成每個登錄名,這很難獲得)。 另外,設置cookie刪除當瀏覽器會話結束..

希望幫助, 最大

+0

@Mazzzzz不知道爲什麼你的答案被標記下來。我標記了它。如果讓你失望的人可以評論原因,那將是一件好事。 – Abs 2010-03-29 12:19:09