Как этот букмарклет позволяет вам оставаться на этом сайте?

StackOverflow https://stackoverflow.com/questions/2534939

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

(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, чтобы он знал, на каком веб-сайте вы находитесь.

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top