4

我遇到了Evernote 的书签,想知道它是如何工作的。

您可以将它拖到您的书签并转到任何网页,单击该书签,它会首先要求您登录。所有这些我已经完成并且知道它是如何工作的。

我不明白的一点是,当您登录时,他们会对您进行身份验证并允许您提交内容(在这种情况下,是网站 url 等)。完成后,在您正在查看的页面上放置一个小覆盖的小书签消失了。

当您转到新标签并再次使用小书签时,您仍然处于登录状态!如何?

当他们的书签将叠加层加载到页面上时,我可以看到他们正在使用 iFrame - 但他们是否设置了 cookie 或其他东西?如果是这样,这安全吗?任何人都可以更改这些值吗?或者他们是否使用某种私钥/公钥系统

顺便说一句,我想使用 PHP/Javascript(也许是 JQuery)复制这个书签。如果有人能帮助我了解他们是如何做到这一点的或向我指出相关教程,我将不胜感激。

感谢大家的帮助。

4

2 回答 2

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 中公开,然后 iframe 可以使用标准 cookie 等,以确保您已登录,然后处理您的请求.

catch 块是为了以防动态脚本加载失败,导致您被重定向到 Evernote 站点,因此(我猜)它可以从那里剪辑内容。

要回答您仍然如何登录的具体问题,您仍然处于登录状态,因为您的浏览器现在具有 Evernote 网站 (www.evernote.com) 的会话 cookie,因此当 iframe 在第二个网站上打开时,这些 cookie 随之而来,Evernote 会识别出您已登录。使用 cookie 几乎是网络会话的标准,因此它们在这里没有做任何特别的事情,我相信您可以搜索 SO 以查找安全问题围绕基于 cookie 的会话。

要点是 iframe 本质上就像打开了一个单独的窗口,只是它允许一些有限的数据通过基本页面传递给 iframe,以便它知道您在哪个网站上。

希望有帮助。

于 2010-03-29T00:43:52.733 回答
0

他们可能正在使用 cookie。他们很可能会使用 JavaScript 在其网站上的 php 页面上打开一个 iframe,然后该网站会查找登录 cookie,如果存在,该网站会提取用户信息并执行其操作。

请注意,您需要一种方法来验证 cookie 不是由用户创建来欺骗网站的。我会将随机字符串存储在 cookie 和数据库中(在用户表中)。每当用户登录时创建随机字符串。当用户尝试使用书签时,比较两个字符串,如果相等则只允许访问,如果不相等,则删除 cookie,并要求用户登录。 . 这确保攻击者不能只使用用户 ID 制作 cookie 并接管他们的帐户(攻击者需要随机字符串,生成每个登录名,这很难获得).. 另外,将 cookie 设置为浏览器会话结束时删除..

希望有帮助,马克斯

于 2010-03-28T23:43:13.583 回答