Как этот букмарклет позволяет вам оставаться на этом сайте? - PullRequest
4 голосов
/ 29 марта 2010

Я сталкивался с букмарклетом Evernote и мне было интересно, как это работает.

Вы можете просто перетащить его в свою закладку и перейти на любую веб-страницу, щелкнуть эту закладку, и она сначала попросит вас войти в систему. Все это я уже сделал и знаю, как это работает.

Бит, который я не понимаю, заключается в том, что когда вы входите в систему, они аутентифицируют вас и позволяют вам отправлять материалы (в данном случае, URL сайта и т. Д.). Когда вы закончите, букмарклет, который поместил небольшое наложение на просматриваемую страницу, исчезнет.

Когда вы переходите на новую вкладку и используете Вы снова вошли в букмарклет в! Как?

Я вижу, что они используют iFrame, когда их букмарклет загружает оверлей на страницу - но они устанавливают куки или что-то еще? Если это так, это безопасно? Кто-нибудь может изменить значения? Или они используют какую-то систему закрытых / открытых ключей

Кстати, я бы хотел воспроизвести этот Bookmarklet с помощью PHP / Javascript (возможно, JQuery). Буду признателен, если кто-нибудь поможет мне понять, как они это делают, или укажет на соответствующие уроки.

Спасибо всем за любую помощь.

Ответы [ 2 ]

3 голосов
/ 29 марта 2010

Для начала вот код, который выполняет букмарклет:

(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 (www.evernote.com), поэтому, когда iframe открывается на На втором сайте эти cookie-файлы идут вместе с ним, и Evernote распознает, что вы вошли в систему. Использование cookie-файлов в значительной степени является стандартом для сеансов в Интернете, поэтому здесь они не делают ничего особенного, и я уверен, что вы можете выполнить поиск SO проблемы безопасности, связанные с сеансами на основе файлов cookie.

Суть в том, что iframe по сути похож на открытое отдельное окно, за исключением того, что он позволяет передавать некоторые ограниченные данные базовой страницей в iframe, чтобы он знал, на каком веб-сайте вы находитесь.

Надеюсь, это поможет.

0 голосов
/ 29 марта 2010

Они, вероятно, используют куки. Скорее всего, они открывают iframe с помощью JavaScript для страницы php на своем сайте, затем сайт ищет cookie для входа в систему, если он есть, сайт извлекает информацию о пользователе и выполняет свою задачу.

Только будьте осторожны, вам нужен способ убедиться, что cookie не был создан пользователем, чтобы обмануть сайт. Я бы сохранил случайную строку в куки, а также в базе данных (в пользовательской таблице). Создайте случайную строку всякий раз, когда пользователь входит в систему. Когда пользователь пытается использовать букмарклет, сравните две строки и разрешите доступ, только если они равны, если нет, удалите куки и попросите пользователя войти в систему. Это гарантирует, что злоумышленник не сможет просто создать cookie с идентификатором пользователя и захватить его учетную запись (злоумышленнику потребуется случайная строка, генерирующая каждый логин, что будет трудно получить). Кроме того, установите куки, чтобы удалить, когда сессия браузера закончена ..

Надеялся, что помог, Max

...