у меня есть веб-сайт, который использует сеансовые куки для безопасности. это хорошо работает и все, но любые запросы ajax прямо сейчас не безопасны. пример быть позволяет, говорят, что пользователь находится на странице. они могут только добраться до этой страницы, если они зарегистрированы с сессией - пока неплохо. но теперь ajax запрашивают, чтобы они попросили,
ajaxpages/somepage.php?somevar=something&anothervar=something
если какой-либо другой пользователь решает просто перейти к тому, связывают себя (без сессии), они все еще получают тот же вывод ajax, который был предназначен для зарегистрированных людей.
так, очевидно, я оказываюсь перед необходимостью передавать данные сессии через то, когда я отправляю ajax запрос. у кого-либо есть какие-либо подсказки для лучшего способа сделать это? я никогда не делал этого прежде и использовал бы методы, которым доверяют, чем составил бы мое собственное.
Используйте ту же проверку безопасности на страницах, которые обрабатывают запрос ajax.
Запросы ajax работают так же, как и любые другие запросы к вашему веб-сайту, и должны возвращать те же файлы cookie сеанса, что и запросы без ajax. На это указывается в этот вопрос . Если вы не получаете файл cookie сеанса, возможно, что-то еще не так.
Поскольку это страница PHP, я не понимаю, почему вы не смогли выполнить аутентификацию на стороне PHP. Если аутентификация прошла успешно, отправьте данные обратно. В противном случае отправьте обратно сообщение об ошибке. AJAX ничем не отличается от любого другого запроса.
Наличие вывода ajax не обязательно является уязвимостью. Это полностью зависит от того, какие данные передаются. Я не уверен, какую платформу вы используете, но на большинстве платформ разработки веб-приложений есть переменная сеанса, которая может поддерживать состояние между запросами.
Что вы должны иметь , так это способ пометить пользователя как вошедшего в систему со стороны сервера. В php это будет выглядеть так:
if(login($user,$password)){
$_SESSION['logged_in']=true;
}
Затем вы можете проверить в файле заголовка, разрешен ли им доступ к странице:
if(!$_SESSION['logged_in']){
header("location: http://127.0.0.1/");
die();
}
(Если переменная не установлена, она также ложна.)
Есть о нескольких вещах, о которых нужно помнить. Это уязвимость:
if(!$_COOKIE['logged_in']){
header("location: http://127.0.0.1/");
die();
}
Пользователь может управлять $ _COOKIE, чтобы он мог сказать вам, что он вошел в систему.
Другая уязвимость:
if(!$_COOKIE['logged_in']){
header("location: http://127.0.0.1/");
}
header () не уничтожает скрипт. Фактически, он все еще работает, поэтому он все равно будет выводиться, но не будет отображаться в браузере, вы все равно можете использовать netcat / telnet / wirehark для просмотра данных.