2010-03-28 3 views
4

Я столкнулся с Evernote's bookmarklet и задавался вопросом, как это сработало.Как этот закладка позволяет вам оставаться на этом сайте?

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

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

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

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

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

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

ответ

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 может затем использовать стандартные файлы cookie и т. Д., Чтобы убедиться, что вы вошли в систему, а затем обработаете запрос ,

Блок catch на всякий случай, когда загружается динамический сценарий, в результате которого вы перенаправляетесь на сайт Evernote, поэтому (я предполагаю), что он может обрезать контент оттуда.

Чтобы ответить на конкретный вопрос о том, как вы все еще вошли в систему, вы все равно вошли в систему, поскольку в вашем браузере теперь есть файлы cookie сеанса для сайта Evernote (www.evernote.com), поэтому, когда iframe открывается на втором сайте, эти файлы cookie идут с ним, и Evernote распознает, что вы вошли в систему. Использование файлов cookie в значительной степени является стандартом для сеансов в Интернете, поэтому они не делают ничего особенного здесь, и я уверен, что вы можете искать SO для проблем безопасности, связанных с сессиями на основе файлов cookie.

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

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

+0

@Bialecki - спасибо за ваш ответ, теперь все ясно. Еще одна странная вещь, которую я только что заметил, заключается в том, что когда вы входите в систему через букмарклет, и вы идете на сайт evernote (без использования букмарклета), вы не вошли в систему. Поэтому я предполагаю, что у них есть два обработчика входа, которые являются отдельными, какой тип смысл. Считаете ли вы, что существует потенциал безопасности, позволяющий пользователю регистрироваться как на сайте, так и в букмаркете, независимо от того, откуда они входят? – Abs

0

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

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

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

+0

@Mazzzzz не знаю, почему ваш ответ был помечен. Я отметил это. Было бы хорошо, если бы кто-то, кто вас заметил, мог оставить комментарий о том, почему. – Abs