Приветствую вас дорогие друзья! Эта статейка будет посвящена защите веб приложения, а именно защите пользователей от кражи (с помощью javascript) их кук!
Итак, давайте рассмотрим такую ситуацию.. Допустим, на моем сайте реализован функционал регистрации и авторизации пользователей, и если с защитой приложения при регистрации пользователей проблем возникнуть не должно, то вот после авторизации и создании кук, могут возникнуть проблемы, связанные с их кражей.
Как можно посмотреть сессионные cookie?
Вот такой вот незамысловатый javascript код выведет нам на экран куки (если они имеются), связанные с сайтом на котором вы находитесь:
После этого вы увидите всплывающее окошко, в котором будет указано названия кук (если их несколько) и PHPSESSID.
Как происходит кража кук?
Сам процесс похищения данных я бы разделил, условно, на 2 этапа:
1. Внедрение нужного кода на страницу.
Допустим, у нас на сайте организована гостевая книга (книга отзывов или ещё что-то подобное) – чтобы оставить свой отзыв, нужно заполнить поля – простая формочка из 3 полей, код формы:
<form method="POST" action=""> Логин: <input type="text" name="login"> Пароль: <input type="password" name="pass"> Отзыв: <input type="text" name="text"> <input type="submit" name="send" value="Отправить"> </form>
Логика такая: если логин и пароль верны – авторизуем пользователя, создав cookie:
setcookie("login",$_POST['login'],time()+259200,"/"); setcookie("pass",$_POST['pass'],time()+259200,"/");
Вроде все хорошо, установили куки на 3 дня.
Далее выводим наш отзыв:
echo '<p>Автор '.$_POST['login'].'</p><p>Отзыв '.$_POST['text'].'</p>';
Все хорошо, как могут похитить данные? правильно?
А теперь представьте, к вам пришел хакер – что он сделает?
А сделать, благодаря вышеизложенному коду, он может все что душе угодно!
Он авторизуется под своим логином и паролем, но в поле отзыва он впишет следующее:
Отзыв
То есть теперь, когда какой-нибудь другой пользователь оставит свой отзыв, будет дергаться скрипт, которому будет передаваться GET параметр – куки пользователя.
2. Получение и обработка данных.
Получить и обработать данные – это уже дело второе, содержимое файла attack.php может быть таким:
file_put_contents("pass.txt",$_SERVER['REQUEST_URI'],FILE_APPEND);
То есть в файл pass.txt будут построчно записываться данные о куках пользователей.
Как защититься?
Во-первых, всегда фильтруйте входные данные!
Немного о фильтрации данных – давайте рассмотрим на данном примере и выясним, как делать нельзя и как нужно делать.
Как нельзя делать:
echo '<p>Автор '.$_POST['login'].'</p><p>Отзыв '.$_POST['text'].'</p>';
Как нужно делать:
$login = check_data($_POST['login']); $text= check_data($_POST['text']); echo '<p>Автор '.$login.'</p><p>Отзыв '.$text.'</p>';
Где check_data – это написанная вами функция, в которой вы проверяете нужные данные должным образом!
Во-вторых: делайте куки недоступными для скриптовых языков, таких как javascript!
Для того, чтобы сделать просмотр кук с помощью javascript недопустимым, необходимо правильно устанавливать php cookie!
Как нельзя делать:
setcookie("pass",$_POST['pass'],time()+259200,"/");
Как нужно делать:
$pass= check_data($_POST['pass']); setcookie("pass",$pass,time()+259200,"/","sergey-oganesyan.ru",false,true);
А теперь давайте пройдемся по всем параметрам (слева направо) функции setcookie:
1. Название куки
2. Значение
3. Время жизни
4. Путь к директории, в которой доступны куки (/ – доступны во всем домене)
5. Домен, на котором они разрешены
6. Куки должны передаваться только от пользователя по защищенному соединение HTTPS – ставим false
7. Ставим true и наши cookie будут доступны только через протокол HTTP
Седьмой параметр появился с версии php 5.2.0 – очень часто о нем забывают.
Вот, в принципе, и вся защита! Теперь фокус с кражей с помощью javascript не пройдет.
Не забывайте фильтровать данные и устанавливайте куки правильно!
На этом у меня все, удачи!
Если вам нужна помощь в создании какого-либо функционала, сайта, сервиса, тестов или калькуляторов, то готов помочь, подробнее на странице услуг.