2012-04-20 12 views
11

Я слышал о CSRF давно, и что я слышу большую часть времени:Что такое защита CSRF?

Защита от CSRF атак очень важно, чтобы кто-то не отправить форму автоматически (с помощью бота или что-то еще)

Ну, это не на 100% верно, не так ли?

Я делаю веб-соскабливание около 3 лет, и довольно просто сделать запрос, разобрать поле csrftokenmiddleware и ПОЧТОВАТЬ его вместе с другими полями.

Итак, для чего это действительно важно?

+0

@agf Я только что прочитал этот вопрос, и я не вижу дублирования ': (' –

+0

Конечно, я читаю ответ сейчас ...;) –

+2

Вы описываете анонимный пост. Все дело в том, чтобы защитить эту запись от реальных учетных данных пользователя. – Cheekysoft

ответ

8

Да, вы можете очистить форму и получить токен предотвращения CSRF. Но вы не можете отправить форму без соскабливания сайта, а вы не можете получить токен от кого-то еще, а затем отправить форму - она ​​связана с сеансом. Это то, что защита CSRF действительно предотвращает, кто-то обманывает пользователя при отправке формы.


Более общее описание CSRFs, первоначально размещен в ответ на Django's comments framework and CSRF:

CSRF это нападение, где кто-то без разрешения на доступ к трюкам ресурсов кто-то действительно есть разрешение на доступ к нему.

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

Таким образом, без защиты CSRF кто-то может теоретически обмануть зарегистрированного пользователя, отправив комментарий, который они фактически не писали.

С защитой CSRF Django обнаружит, что это не реальные данные, представленные через фактическую форму на вашем сайте, и отклонит ее.

1

Это защита для другого типа сценария. Иногда злоумышленник может вставлять либо javascript, либо iframes, либо img src-s на вашу страницу в том месте, к которому может войти любой зарегистрированный пользователь. Когда пользователь обращается к странице (скажем, страница с комментариями, а один комментарий запрашивает ссылку от публикации злоумышленников), этот запрос выполняется браузером пользователя loggedin, в целом с его файлами cookie. CSRF в основном защищает этот тип инициированных отправлений (простые клиентские сообщения). Конечно, любой злоумышленник может запросить страницу, проанализировать ее для токена и создать запрос с помощью токена, но не может сделать это рядом с зарегистрированным пользователем.

16

Представьте себе веб-приложение электронного банкинга в banking.example.com со следующей формы представить сделку:

<form action="/transaction" method="post"> 
    <input type="text" name="beneficiary"/> 
    <input type="text" name="amount"/> 
    <input type="submit" value="Pay"/> 
</form> 

Злоумышленник теперь может создать веб-сайт в hacker.net со следующим:

<form action="https://banking.example.com/transaction" method="post" style="visibility:hidden"> 
    <input type="text" name="beneficiary" value="John Doe, Account No. 34-236326-1"/> 
    <input type="text" name="amount" value="1000000"/> 
    <input type="submit" value="Pay"/> 
</form> 
<script> 
    document.forms[0].submit(); 
</script> 

Затем злоумышленник обманул бы жертв посещения hacker.net, что заставит браузеры жертв отправлять запрос POST в приложение электронного банкинга, делая большую транзакцию для хакера. Это работает, потому что браузер жертвы с радостью отправляет куки-файл сеанса вместе с поддельным POST-запросом в приложение электронного банкинга. Если форма была бы защищена токеном CSRF, злоумышленник не мог заставить браузер жертвы отправлять действительный запрос POST, и поэтому атака была бы невозможна.

Этот тип атаки называется атакой на межсайтовый запрос (CSRF).

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

Точки CSRF не защищают веб-форму, автоматически передаваемую постоянными авторизованными пользователями как сами. Чтобы защитить вас, вы должны использовать CAPTCHA.

+0

Как вы думаете, что это отличается от проверки реферера на стороне сервера? Не поддерживая cookie csrf, но делая только эту проверку, я все же могу идентифицировать атаку. – Ethan

+0

Хорошо, я узнал, почему реферер не используется. Во многих случаях он блокируется, поскольку иногда считается конфиденциальной информацией. Обычно это делают корпорации и их доверенные лица. Однако, если используется HTTPS, существует вероятность того, что он не будет заблокирован. И есть также упоминания о том, что реферер может быть подделан. – Ethan

+0

Я снова столкнулся с этим вопросом, обратившись к другу о CORS. 'document.forms [0] .submit();' не будет работать в любом случае из-за политики того же происхождения, верно? –

0

Вы не сможете

, чтобы сделать запрос, разобрать csrftokenmiddleware поле и отправить его вместе с другими полями.

потому что JS в другом домене не сможет извлекать и использовать данные из вашего домена для создания запросов, если ваш сервер настроен properly.

Подробнее о CORS.

Смежные вопросы