21 Востаннє редагувалося ktretyak (16.04.2015 17:06:21)

Re: Збираємо інформацію стосовно XSRF-атак

VTrim написав:

...
Так ви за один запит збираєтесь відправляти і POST і GET. Ви таке пробували робити?

Зараз подумав про те що я оце написав Невже це я написав?! Це мабуть хтось CSRF-атакує!

22

Re: Збираємо інформацію стосовно XSRF-атак

P.Y. написав:
funivan написав:

одним словом пора завязувати ))
хто знає нормальні методи захисту від xsrf крім того як відключити javascript ?

Розробляти безпечний сайт так, щоб у ньому не використовувались cookies. Ідентифікатор сесії передавати виключно через дані форми (в вигляді прихованого поля).

Як ви будете перевіряти цей ідентифікатор, окрім як через куки/сесію?

P.Y., зрозуміло, що ваш девіз: менше наворотів - більше надійності!

Але, нажаль, на чистому HTML далеко не поїдеш. Те що ви кажете про додаткову JS-функціональність, якої варто уникати якщо її можна зробити і на чисто HTML, то а хіба цього не дотримується більшість? Всі намагаються зробити на HTML, CSS.

23

Re: Збираємо інформацію стосовно XSRF-атак

ktretyak написав:
VTrim написав:
funivan написав:

одним словом пора завязувати ))
хто знає нормальні методи захисту від xsrf крім того як відключити javascript ?

Встановлювати токен ключ в hidden поле для POST,і в адресний рядок для GET.
І якщо ключ empty/!isset або != сесії користувача,то error.

Так ви за один запит збираєтесь відправляти і POST і GET. Ви таке пробували робити?

Ні,окремо для POST i GET, (хоча можна і для обох разом).

24

Re: Збираємо інформацію стосовно XSRF-атак

Як ви будете перевіряти цей ідентифікатор, окрім як через куки/сесію?

Куки треба ігнорувати на стороні сервера. Механізм сесій можна реалізувати й без cookies — передаючи ідентифікатор через параметр URL чи приховане поле форми.

25 Востаннє редагувалося ktretyak (16.04.2015 17:10:26)

Re: Збираємо інформацію стосовно XSRF-атак

P.Y. написав:

Куки треба ігнорувати на стороні сервера. Механізм сесій можна реалізувати й без cookies — передаючи ідентифікатор через параметр URL чи приховане поле форми.

Якщо зловмисник знайшов спосіб отримати ідентифікатор активної сесії, то йому доступно це вставити в будь-який запит POST або GET. Тобто немає сенсу комбінувати її "і там, і там", бо це якраз доступно для зловживань.

26

Re: Збираємо інформацію стосовно XSRF-атак

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

27 Востаннє редагувалося ktretyak (16.04.2015 17:19:18)

Re: Збираємо інформацію стосовно XSRF-атак

P.Y. написав:

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

Та йому в такому разі взагалі не треба отримувати актуальний ідентифікатор сесії, бо на сервері перевіряється чи сходиться один параметр з іншим, тобто "пиши шо хоч, лиш би було те саме".

Оновлено:
Ні, знову ж таки, - щось перевіряти можна лише, якщо ви щось передаєте, десь собі це записуєте, а потім коли приходить форма, то звіряєтесь чи вона дорівнює тому що у вас зберігається. Як це можна зробити?
Без сесії, мабуть, тут не обійтись. І я теж виключав її якось з переліку кук. Мабуть коли пишуть про запобігання XSRF-атакам то говорять про куку, яка дозволяє ідентифікувати сесію.

28 Востаннє редагувалося P.Y. (16.04.2015 17:31:17)

Re: Збираємо інформацію стосовно XSRF-атак

Давайте почнемо з азів. Що собою являє сесія? Це дані (наприклад, ім'я користувача), що зберігаються на стороні сервера (у файлі чи базі даних), доступ до яких здійснюється за ідентифікатором, що генерується на сервері й передається (через cookies чи як get-параметр/post-параметр безпосередньо в html) клієнтові, а потім повертається на сервер з наступним запитом. Очевидно, складність цього ідентифікатора має бути такою, щоб його неможливо було отримати простим перебором. Якщо клієнт передає ідентифікатор неіснуючої сесії, то ніяких даних сесії сервер не знайде.

Щодо контрольного параметру. Якщо він передаватиметься тим же способом, що й ідентифікатор сесії, то що заважає зловмиснику вкрасти і ідентифікатор сесії, і контрольний параметр?

29 Востаннє редагувалося ktretyak (16.04.2015 17:50:31)

Re: Збираємо інформацію стосовно XSRF-атак

Давайте вияснимо:
1. чи може певний зловмисний код, на сайті атакуючого, прочитати будь-яку куку з браузера жертви
2. в який спосіб можна посилати POST запити із сайта атакуючого? Мабуть це можна зробити виключно через JS, але я не впевнений в цьому.

Оновлено:
Що до другого пункту, то мабуть POST запит можна відправити через форму =). Я просто раніше уявляв собі що жертва повинна щось "безневинне клікнути", а не явно форму. Більше того - форму можна через CSS замаскувати під лінк...

30

Re: Збираємо інформацію стосовно XSRF-атак

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

31

Re: Збираємо інформацію стосовно XSRF-атак

1. Ні. (куки прикліпляються до домену)
2.  POST запит можна відправляти на інший домен прямою формою зі схованим полями але видимою кнопкою (для натиску). Або ж через кроссдоменний AJAX.

Якщо на сайті жертви є XSS,але куки ми викрасти не можемо (допустимо тому,що вони встановлені в режимі HttpOnly),то ми можемо вставити схований AJAX запит,до локальної сторінки с формою (без захисту від XCRF).
І кожен хто зайде на ту сторінку,відразу відправить від себе  post запит.

32

Re: Збираємо інформацію стосовно XSRF-атак

P.Y. написав:

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

Так, зможе це зробити без будь-якого скрипта, бо ідентифікатор сесії перевіряє, в нашому випадку, банк, а не зловмисний сайт. Тобто зловмисний сайт передає параметри в рядку запиту POST або GET без будь-яких додаткових маніпуляцій. Коли цей запит приходить на сайт банку, то вже банк перевіряє чи її клієнт має актуальну сесію.

33

Re: Збираємо інформацію стосовно XSRF-атак

Отже що я для себе більш чітко вияснив:
1. куки потрібно використовувати, бо без них неможливо ідентифікувати той токен, який ми вставляємо у форму
2. JavaScript має доступ виключно до тих куків, на чийому домені він зберігається (якщо, звичайно ж, не використовувати додаток до браузера невідомого походження).
3. оскільки JavaScript може читати куки тільки на "своєму" домені, то JavaScript можна використовувати для відправки додаткового (секретного) ідентифікатора в заголовку разом з будь-яким запитом. В такому разі навіть не потрібно додавати приховані поля у форму.

34

Re: Збираємо інформацію стосовно XSRF-атак

Шо ще?
Допустимо у вас на сайті є лінк (GET запит),по якому користувач може видалити своє повідомленяя,типу.
/del_message.php?id=777

І може залишити у себе картинку (картинки) типу <img src="http://yoursite.com/del_message.php?id=777">
Після відвідування вами його сайту,ваші записи видаляться,ну і так далі по прикладу лайків,дізлайків і тому подібне..

35

Re: Збираємо інформацію стосовно XSRF-атак

VTrim написав:

Шо ще?
Допустимо у вас на сайті є лінк (GET запит),по якому користувач може видалити своє повідомленяя,типу.
/del_message.php?id=777

І може залишити у себе картинку (картинки) типу <img src="http://yoursite.com/del_message.php?id=777">
Після відвідування вами його сайту,ваші записи видаляться,ну і так далі по прикладу лайків,дізлайків і тому подібне..

За умови, що немає прив'язки до сесії/кук/авторизації/прав.
Хто в здоровому стані стане робити видалення без перевірки, через get-запит?

IMHO приклад надто надуманий.

36 Востаннє редагувалося ktretyak (16.04.2015 21:53:38)

Re: Збираємо інформацію стосовно XSRF-атак

Sensetivity написав:

За умови, що немає прив'язки до сесії/кук/авторизації/прав.
Хто в здоровому стані стане робити видалення без перевірки, через get-запит?

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

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

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

37 Востаннє редагувалося VTrim (17.04.2015 17:39:00)

Re: Збираємо інформацію стосовно XSRF-атак

ktretyak написав:

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

Саме це я і мав на увазі,якщо користувач буде авторизований,то запит воконається.
І я наводив приклад того,що буде якщо без захисту.

До чого тут права? Якщо така атака розрахована на певного користувача.