Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Правило №2. Выполняйте действия только через POST, а не через GETСильно неоднозначное правило.
А вот постить «фреймы, яваскрипты и невидимые кнопки» не разрешено нигде, и для этого как минимум потребуется свой сайт.И свой сайт и размещение картинки — это действия выполняемые на постороннем для атакуемого ресурсе. Токен защищает от всех атак подобного типа, а не просто «немного усложняет задачу».
Ничего не защищает ни от чегоКаким образом не ломая сайт и компьютер пользователя можно обойти, допустим, одноразовый токен в форме? Вопрос без подколки, правда интересно.
которым просто лень делать свой сайт для взламывания вашего сайтика
Еще одно популярное заблуждение. Поверьте,
Проверка на POST обязательна и с этим спорить нет смысла.При наличии токенов она на фиг не нужна — вот с этим нет смысла спорить:)
Использовать «токены» (вообще, от CSRF обычно защищаются проверкой текущей сессии, а не так, как вы предлагаете) — это далеко не так просто, для этого надо дописывать почти все запросы с обеих сторонПроверкой текущей сессии от csrf не защищаются, т.к. в ряде случаев сессия как раз может быть текущей, если Вы именно о сессии.
Проверкой текущей сессии от csrf не защищаются, т.к. в ряде случаев сессия как раз может быть текущей, если Вы именно о сессии.
В большинстве случаев это необычайно просто, несложный код строк на 50
Проверка сессии на каждом запросе — это далеко не очевидное правилоДелать всё post-ом это не защищающее правило. А проверка сессии — защищающее. Какое из них более очевидное на этом фоне — не суть важно:)
И свой сайт и размещение картинки — это действия выполняемые на постороннем для атакуемого ресурсе. Токен защищает от всех атак подобного типа, а не просто «немного усложняет задачу».
Каким образом не ломая сайт и компьютер пользователя можно обойти, допустим, одноразовый токен в форме? Вопрос без подколки, правда интересно.
сравнивать текущий session_id пользователя с переданным в запросе (не в куке).
несет дополнительный функционал, который можно использовать для взлома.
Правило №1. Делайте все авторизационные куки HttpOnly
в вашем случае правильное значение токена надо помнить на сервере
Или Вы хотите сравнивать значение из куки со значением из формы?
Поздравляю, Вы изобрели csrf-токен.
сравнивать значение из куки со значением из формы
alert(document.cookie);
server {
listen 80;
if ( $scheme = "http" ) {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
}Для дополнительной защиты следует проверять также referer
Со стороны сервера всегда относитесь к вашему javascript-коду так, как будто он весь, от первой до последней буквы написан вашим самым ненавистным врагом, желающим сломать ваш сайт, нарушить целостность ваших данных и продать в рабство вашу жену. Тем более, что иногда это действительно так.
if ($n != (int)$n) {
// это неправильная проверка, проверьте на "123'; DROP DATABASE users; --"
}
if ($n != (int)$n) {
// это неправильная проверка, проверьте на "123'; DROP DATABASE users; --"
}
$var = $_GET['var']'
if(is_numeric($var) && is_int($var) && $var<2147483647 && $var>-2147483647){
}
$n = $_GET['n'];
if ($n != (int)$n) {
trigger_error("Invalid number", E_USER_WARNING);
return false;
}
try {
$n = Integer::parse($_GET['n']);
} catch (ParseException $e) {
// blabla
}
InvalidArgumentException, и да, поддерживаю вашу позицию.что пользователи могут сами допускать ошибки (принять не тот сертификат, или вообще добавить в браузер не тот CA, и так далее).
1. Отдавать залогинившимся пользователям все страницы каталога только по https
+ наилучшая защита
- коллеги по работе, посетители и конкуренты решат, что разработчик - придурок и параноик
2. Страницы каталога отдавать по http, для комментариев использовать iframe с https
+ "нормальный, привычный" вид адресной строки
- считается, что небезопасно смешивать на одной странице данные http/https
3. Страницы каталога отдавать по http, комментирующие идентифицируются небезопасной кукой.
+ наиболее часто используемый вариант, довольно простой
- система комментирования будет подвержена атакам (cookie hijacking и т.п.)
:http_only => true:httponly => true<?php
ob_start();
var_dump($_COOKIE,$_SERVER);
setcookie("some",time(),0,"/","*",false,true); // set http only cookie
ob_end_flush();
?>
Очевидные 3 правила безопасности