Domanda

Mi sono imbattuto in bookmarklet di Evernote e si chiedeva come questo ha funzionato.

Si può semplicemente trascinarlo al vostro segnalibro e andare in qualsiasi pagina Web, fare clic su tale bookmarklet e sarà prima cosa richiedere di effettuare il login. Tutto questo ho già fatto e sapere come funziona.

Il bit che non capisco è che quando si accede ti autenticazione e consentono di inviare roba (in questo caso, un sito URL ecc). Quando hai finito il bookmarklet che poneva un piccolo overlay sulla pagina che si sta visualizzando scompare.

  

Quando si va in una nuova scheda e utilizzare il   bookmarklet ancora una volta si sono ancora registrati   nel! Come?

Vedo che stanno utilizzando un iFrame quando il loro bookmarklet carica la sovrapposizione sulla pagina - ma non hanno impostare i cookie o qualcosa del genere? Se è così, è questo sicuro? Chiunque può cambiare i valori? O sono utilizzando una sorta di sistema di chiave privata / pubblica

A proposito, vorrei replicare questa Bookmarklet utilizzando PHP / Javascript (JQuery forse). Le sarei grato se qualcuno mi può aiutare a capire come fanno questo o indicarlo al tutorial rilevanti.

Grazie a tutti per qualsiasi aiuto.

È stato utile?

Soluzione

Per cominciare, ecco il codice del bookmarklet esegue:

(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);
}

}) ();

Ciò che fa è relativamente semplice. Si cerca di afferrare uno script dal sito Evernote e aggiunge un timestamp alla richiesta in modo che tira sempre una nuova copia. Se questo riesce, un mucchio di JavaScript viene aggiunto alla pagina che costruisce un iframe da cui tutte le funzionalità di Evernote è esposto e l'iframe può poi utilizzato i cookie standard, ecc per assicurarsi che si è registrato e quindi elaborare la tua richiesta .

Il blocco catch è solo nel caso in cui lo script non riesce caricamento dinamico, in cui perché sei reindirizzati al sito Evernote modo (sto cercando di indovinare) che si può ritagliare il contenuto da lì.

Per rispondere alla domanda specifica di come si sta ancora effettuato l'accesso, si sta ancora registrato perché il browser che ha ora i cookies di sessione per il sito Evernote (www.evernote.com), in modo che quando l'iframe si apre sulla secondo sito, quei biscotti andare con lui e Evernote riconosce che si è registrato in. l'utilizzo dei cookies è praticamente lo standard per le sessioni sul web, in modo che non stanno facendo nulla di speciale qui e sono sicuro che è possibile cercare SO i problemi di sicurezza che circondano le sessioni basate biscotto.

Il punto principale è l'iframe è essenzialmente come avere una finestra separata aperta, tranne che permette ad alcuni dati limitati per essere passato dalla pagina di base per l'iframe in modo da sapere quale sito si è in.

La speranza che aiuta.

Altri suggerimenti

They are probably using cookies. They most likely open up an iframe, with JavaScript, to a php page on their site, then the site looks for a login cookie, if it is there, the site pulls the user info, and does its thing.

Just be careful, you need a way to verify that the cookie wasn't created by the user to trick the site. I would store a random string in a cookie, and also in the database (in the user table). Create the random string whenever the user logs in. When the user tries to use the bookmarklet, compare the two strings, and only allow access if they are equal, if they aren't, delete the cookies, and ask the user to login.. This makes sure an attacker can't just make a cookie with the user's ID and take over their account (the attacker would need the random string, generated each login, which would be hard to obtain).. Also, set the cookies to delete when the browser session is ended..

Hoped that helped, Max

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top