URL-адреса https з параметром маркера: наскільки це безпечно?


88

На нашому веб-сайті ми пропонуємо користувачам симуляцію на основі їхньої приватної інформації (надається через форму). Ми хотіли б дозволити їм пізніше повернутися до результатів моделювання, але не змушуючи їх створювати обліковий запис для входу в систему / пароль.

Ми думали надіслати їм електронний лист із посиланням, за яким вони могли б отримати свої результати. Але, природно, ми маємо захистити цю URL-адресу, оскільки йдеться про приватні дані.

Отже, ми маємо намір передавати маркер (наприклад, 40-символьну комбінацію букв і цифр або хеш MD5) у URL-адресу та використовувати SSL.

Нарешті, вони отримають такий електронний лист:

Привіт,
поверніть свої результати на https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn

Що ви думаєте про це? Це досить безпечно? Що б ви мені порадили для покоління лексем? А як щодо передачі параметрів URL-адреси в запиті https?


Відповіді:


97

SSL захищає параметри запиту під час передачі; однак електронна пошта сама по собі не захищена, і електронна пошта може відбиватися по будь-якій кількості серверів, перш ніж дістатися до місця призначення.

Також, залежно від вашого веб-сервера, повна URL-адреса може реєструватися у файлах журналу. Залежно від того, наскільки конфіденційні дані, ви можете не хотіти, щоб ваші ІТ-працівники мали доступ до всіх маркерів.

Крім того, URL-адреса із рядком запиту буде збережена в історії вашого користувача, що дозволить іншим користувачам тієї ж машини отримати доступ до URL-адреси.

Нарешті, і що робить це дуже небезпечним, це те, що URL-адреса надсилається в заголовок Referer усіх запитів на будь-який ресурс, навіть на сторонні ресурси. Отже, якщо ви використовуєте Google Analytics, наприклад, ви надішлете Google маркер URL-адреси та всі їм.

На мій погляд, це погана ідея.


1
Я не думав про проблему з посиланням на HTTP, але посилання на URL-адресу переспрямовуватиме на сторінку результатів, це не буде правильною сторінкою (без аналітики Google чи іншого сторонніх сценаріїв).
Flackou,

5
Хіба більшість браузерів не видаляють реферала при переході з HTTPS на HTTP?
Kevin Mark

2
Це схоже на посилання на активацію користувача (або скидання пароля), правда? Як тоді слід розглядати цю справу? Багато веб-сайтів надсилають URL-адреси скидання на електронну пошту, POST не є можливістю, оскільки для цього слід натискати. Дякую.
pinkpanther

2
то яке рішення?
RT

1
що якщо маркер в URL-адресі не той самий, що і маркер, який використовується для запитів API, і він триває лише одну годину, яка шкода буде тоді?
user1709076

13

Я б використав для цього файли cookie. Робочий процес повинен бути таким:

  1. Користувач заходить на ваш сайт вперше.
  2. Сайт встановлює файли cookie
  3. Користувач вводить дані. Дані зберігаються в БД за допомогою якогось ключа, який зберігається в файлі cookie.
  4. Коли користувач йде, ви надсилаєте йому електронне повідомлення із посиланням https:
  5. Коли користувач повертається, сайт виявляє файл cookie і може представити користувачеві старі дані.

Тепер користувач хоче використовувати інший браузер на іншій машині. У цьому випадку запропонуйте кнопку "передати". Коли користувач натисне на цю кнопку, вона отримає "жетон". Вона може використовувати цей маркер на іншому комп’ютері для скидання файлу cookie. Таким чином, користувач вирішує, наскільки безпечно вона хоче передати маркер.


4

SSL захищає вміст даних, що передаються, але я не впевнений у URL-адресі.

Незважаючи на це, один із способів пом’якшити зловмисник, який повторно використовує цей маркер URL, - переконатися, що кожен маркер можна використовувати лише один раз. Ви навіть можете встановити файл cookie, щоб законний користувач міг продовжувати використовувати посилання, але після першого доступу це буде працювати лише для тих, хто має файли cookie.

Якщо електронна пошта користувача скомпрометована, і зловмисник отримує посилання першим, ну, ви готові. Але у користувача також є більші проблеми.


10
SSL-з'єднання захищене перед передачею URL-адреси.
Девід

1

Електронна пошта за своєю суттю є небезпечною. Якщо хтось може натиснути на це посилання та перейти до даних, ви насправді їх не захищаєте.


Точно, але багато багатьох сайтів не турбуються про це і надсилають логін / паролі поштою. Але це не причина наслідувати їх ...
Флако

Я не погоджуюсь, що немає жодної причини наслідувати їх, але вони зазвичай пропонують вам змінити пароль після першого входу в систему.
Джейсон Пунйон

1

Ну, маркер захищений при передачі через SSL. Проблема, яку ви збираєтеся мати, полягає в тому, що вона доступна для людей (тих, для кого вона не призначена) завдяки можливості перегляду URL-адреси.

Якщо це приватна інформація, така як SSN, я не думаю, що я б надсилав URL-адресу електронною поштою. Я волів би, щоб вони створили ім’я користувача та пароль для сайту. Надто легко компрометувати електронну пошту з такою інформацією, яка поставлена ​​на карту для вас і для них. Якщо чийсь рахунок скомпрометований, він постане під сумнів, чия це вина насправді. Чим безпечніше, тим краще ви з суворої точки зору.


1
Ви маєте рацію: URL-адреса залишиться, наприклад, в історії браузера
Flackou 13.03.09

0

Я б справді не вважав це достатньо безпечним для ситуації, коли є серйозні проблеми з конфіденційністю. Той факт, що ви надсилаєте URL-адресу електронною поштою (імовірно, чистим текстом), є найслабшим посиланням. Після цього є ризик грубих атак на маркери, які (не маючи структури реального механізму автентифікації), швидше за все, є більш вразливими, ніж добре побудована установка імені користувача та пароля.

До речі, із запитами https взагалі не виникає проблем із параметрами.


Ви маєте рацію щодо ризику нападу грубою силою. Я не розумію, як ми могли запобігти ботам від такого типу атак. Заборона "наполягати" на ІВ не буде достатнім захистом. Чи мали б ви ідеї на цю тему?
Flackou,

Власне, з типом ключового простору, про який ми говоримо, ставлячи if (this_ip_number_has_reanted_an_invalid_token_today ()) sleep (5); у вашому скрипті load_simulation буде цілком достатнім захистом. (Обмеження швидкості є однією з особливостей хороших механізмів автентифікації.)
хаос

Дякую за вашу відповідь. Але я думав, що один і той же бот може легко взяти різні IP-адреси, що робить обмеження швидкості IP недостатнім. Я помиляюся?
Флаку

Все, що їх отримує, - це одна невідкладена спроба на IP. Простір IP-адрес не так легко доступний, що це корисно.
хаос

0

В даний час це буде поганою ідеєю. Ви покращите безпеку за допомогою простого використання. Як вже було сказано раніше, SSL захистить лише передачу інформації між сервером та клієнтським браузером і лише запобіжить атаці середньої людини. Електронні листи дуже ризиковані та небезпечні.

Найкращою буде автентифікація імені користувача та пароля для доступу до інформації.

Мені ідея печива подобається більш-менш. Вам також слід зашифрувати інформацію про файли cookie. Вам також слід згенерувати маркер із сіллю та ключовою фразою плюс $ _SERVER ['HTTP_USER_AGENT'], щоб обмежити ймовірність атаки. Зберігайте якомога більше нечутливої ​​інформації про клієнта у файлі cookie для перевірки використання.

Ключова фраза може зберігатися в файлі cookie для зручності використання, але майте на увазі, що файл cookie також може бути вкрадений = (.

Краще дозвольте клієнту ввести ключову фразу, яку він надав, яка також зберігається в базі даних разом із його даними.

Або ключ можна використовувати у випадку, якщо особа використовує іншу машину, яка відрізняється параметрами $ _SERVER ['HTTP_USER_AGENT'] або просто пропускає файл cookie. Таким чином, файл cookie може бути переданий або встановлений.

Також переконайтеся, що конфіденційні дані зашифровані в базі даних. Ти ніколи не дізнаєшся ;)


-1

Ви знаєте, що якщо який-небудь хакер отримає доступ до вашої бази даних, багато персональної інформації може бути надано вільно?

Після цього я б сказав, що це непогано як ідея. Я б не використовував MD5 або SHA1, оскільки вони не дуже безпечні для хешування. Їх можна досить легко «розшифрувати» (я знаю, що це не шифрування).

В іншому випадку я міг би скористатися другою інформацією, яка не буде надіслана електронною поштою паролем. Причина досить проста: якщо хтось отримає доступ до електронної пошти користувача (досить просто за допомогою Hotmail, якщо ви не вб'єте сеанс), він матиме доступ до будь-якої інформації, надісланої користувачем.

Зверніть увагу, що HTTPS захистить та зашифрує дані, що надсилаються з вашого веб-сайту кінцевому користувачеві. Нічого іншого, сприймайте це як надійний канал. Нічого більше нічого менше.


Як саме розсольований хеш SHA1 розшифровується в будь-якому сенсі цього слова?
Елі

"Ви знаєте, що якщо який-небудь хакер отримає доступ до вашої бази даних, багато персональної інформації може бути надано вільно?" Так, але хіба це не проблема для всіх веб-сайтів ??
Flackou

@Flackou так, але якщо ви отримаєте доступ до db paypal, ви не знайдете чітко збереженої інформації про кредитну картку, все зашифровано. @Eli: theregister.co.uk/2005/02/17/sha1_hashing_broken
Ерік

-1

Наскільки я розумію вашу ідею, теоретично хтось міг ввести випадковий 40-символьний рядок або хеш MD5 і отримати комусь інші дані. Хоча це може бути малоймовірним, це потрібно зробити лише один раз.

Кращим рішенням може бути надсилання користувачеві маркера, а потім попросити його ввести деякі деталі, такі як ім’я, поштовий індекс, ssn або їх комбінацію.


5
SSN? Ти серйозно? У будь-якому випадку, я пропоную вам розрахувати, скільки є 40 символьних випадкових рядків. Це більше, ніж просто "дуже малоймовірно"
Елі,

Ви маєте рацію, нам слід, мабуть, додати ще один параметр в URL-адресу, наприклад електронний лист (навіть якщо a..z + A..Z + 0..9 = 62 символи, а 62 ^ 40 - це досить велике число).
Flackou,

Хлопці, 62 ^ 40 - це значно більше, ніж кількість атомів у Всесвіті. Це буквально неможливо сказати.
Елі

1
Я здивований, як багато людей не можуть зрозуміти масштаб цих цифр. Якщо ви вгадували МІЛЬЙОН жетонів за секунду, набагато більше шансів, що сонце вигорить до того, як ви отримаєте удар
Елі

4
Річарде, схоже, ти вказуєш на те, що зазвичай називають Парадоксом до Дня Народження ... Має значення не лише кількість можливих комбінацій, а те, скільки з них використовується. Що ж, у цьому випадку вам потрібно використовувати приблизно 2 ^ 119 із комбінацій 62 ^ 40, перш ніж шанс стане значним.
erickson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.