Как этот букмарклет позволяет вам оставаться зарегистрированным на этом сайте?
Я наткнулся букмарклет Evernote и мне было интересно, как это работает.
Вы можете просто перетащить его на закладку и перейти на любую веб-страницу, нажать на этот букмарклет, и он сначала попросит вас войти. Все это я уже сделал и знаю, как это работает.
Бит, который я не понимаю, заключается в том, что при входе в систему они аутентифицируют вас и позволяют вам отправлять материалы (в данном случае url-адрес сайта и т. д.). Когда вы закончите букмарклет в котором помещен небольшой наложение на просматриваемую страницу исчезает.
Когда вы переходите на новую вкладку и используете букмарклет снова вы все еще регистрируетесь внутрь! Но как?
Я вижу, что они используют iFrame, когда их букмарклет загружает наложение на страницу - но они устанавливают куки или что-то еще? Если да, то безопасно ли это? Кто-нибудь может изменить эти ценности? Или они используют какую-то систему закрытых / открытых ключей
Кстати, я хотел бы повторить этот букмарклет, используя PHP / Javascript (возможно, JQuery). Я был бы признателен, если кто-нибудь поможет мне понять, как они это делают, или укажет мне соответствующие учебные пособия.
Спасибо всем за любую помощь.
2 ответа:
Для начала, вот код, который выполняет букмарклет:
(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, чтобы (я предполагаю) он мог вырезать содержимое оттуда.
Чтобы ответить на конкретный вопрос о том, как вы все еще вошли в систему, вы все еще вошли в систему, потому что ваш браузер теперь имеет сеансовые файлы cookie для сайта Evernote (www.evernote.com), поэтому, когда iframe открывается на втором сайте, эти файлы cookie идут с ним, и Evernote распознает это вы вошли в систему. Использование файлов cookie является в значительной степени стандартом для сеансов в интернете, поэтому они не делают здесь ничего особенного, и я уверен, что вы можете искать так для проблем безопасности, связанных с сеансами на основе файлов cookie.
Суть в том, что iframe по сути похож на отдельное открытое окно, за исключением того, что он позволяет некоторым ограниченным данным передаваться базовой страницей в iframe, чтобы он знал, на каком веб-сайте вы находитесь.
Надеюсь, это поможет.
Они, вероятно, используют файлы cookie. Они, скорее всего, открывают iframe, с JavaScript, на страницу php на своем сайте, затем сайт ищет файл cookie для входа, если он есть, сайт вытаскивает информацию о пользователе и делает свое дело.
Просто будьте осторожны, вам нужен способ проверить, что файл cookie не был создан пользователем, чтобы обмануть сайт. Я бы сохранил случайную строку в файле cookie, а также в базе данных (в таблице пользователей). Создайте случайную строку всякий раз, когда пользователь входит в систему. Когда пользователь пытается использовать букмарклет, сравнить две строки и разрешить доступ только в том случае, если они равны, если они не равны, удалить файлы cookie и попросить пользователя войти в систему.. Это гарантирует, что злоумышленник не сможет просто создать файл cookie с идентификатором пользователя и завладеть его учетной записью (злоумышленнику потребуется случайная строка, генерируемая каждым логином, которую будет трудно получить).. Кроме того, установите куки для удаления, когда сеанс браузера закончится..Надеялся, что это поможет, Max