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 がページに追加され、Evernote のすべての機能が公開される iframe が構築されます。iframe は標準の Cookie などを使用してログインしていることを確認し、リクエストを処理します。 .

catch ブロックは、動的スクリプトの読み込みが失敗した場合に備えてあります。その場合、Evernote サイトにリダイレクトされ、そこからコンテンツを切り取ることができます (私は推測しています)。

どうやってログインしたままなのかという具体的な質問に答えると、ブラウザには Evernote サイト (www.evernote.com) のセッション Cookie があるため、ログインしたままになります。これらの Cookie は一緒に使用され、Evernote はあなたがログインしていることを認識します。Cookie の使用は Web 上のセッションのほとんどの標準であるため、ここでは特別なことは何もしていません。SO でセキュリティの問題を検索できると確信しています。 Cookie ベースのセッションを囲んでいます。

要点は、iframe は基本的に別のウィンドウを開くようなものですが、ベース ページから iframe に限られたデータを渡すことができるため、現在の Web サイトを認識できます。

それが役立つことを願っています。

于 2010-03-29T00:43:52.733 に答える
0

彼らはおそらくクッキーを使用しています。ほとんどの場合、JavaScript を使用してサイトの php ページに iframe を開き、サイトはログイン Cookie を探します。そこにある場合、サイトはユーザー情報を取得し、その処理を実行します。

サイトをだますためにユーザーが Cookie を作成したのではないことを確認する方法が必要です。ランダムな文字列を Cookie とデータベース (ユーザー テーブル) に格納します。ユーザーがログインするたびにランダムな文字列を作成します。ユーザーがブックマークレットを使用しようとすると、2 つの文字列を比較し、等しい場合にのみアクセスを許可し、等しくない場合は Cookie を削除し、ユーザーにログインを求めます。 . これにより、攻撃者はユーザーの ID を使用して Cookie を作成し、アカウントを乗っ取ることができなくなります (攻撃者は、ログインごとに生成されるランダムな文字列が必要になるため、取得が困難になります)。ブラウザ セッションが終了したときに削除します。

お役に立てば幸いです、マックス

于 2010-03-28T23:43:13.583 に答える