У меня есть форма регистрации, которая работает без проблем, но недавно мне сказали, что это вредная привычка для UX, например, если учетная запись уже существует, и я перенаправляю пользователя обратно на страницу регистрации, без повторно заполнить заполненную форму и отобразить только сообщение об ошибке.
Поэтому я быстро нашел хороший способ исправить это, если после проверки первоначальных регистрационных данных и если учетная запись с соответствующим адресом электронной почты уже существует, я мог бы просто создать $ _SESSION, хранящий данные $ _POST, и уничтожить его после повторного -заполнение формы пользователя.
Теперь мой вопрос: являются ли переменные $ _SESSION уязвимыми для любого типа атак, или я могу пойти дальше и сохранить исходные входные данные внутри $ _SESSION и избежать их с помощью htmlspecialchars () при повторном заполнении формы?
Переменные в сеансе не уязвимы для атак внутри сеанса. Однако использование этих переменных в других местах может открыть дыры. Например, только то, что вы поместили переменную get / post в сессию, не означает, что она волшебным образом может быть использована непосредственно в запросе. Это все еще может вызвать проблемы с внедрением SQL. При рассмотрении подобных вещей вы должны подумать о том, откуда берутся данные. Если оно началось от какого-то пользовательского ввода, считают это грязным.
Единственное место, где это может быть проблемой, это если отправленные данные очень большие, а вы просто слепо назначаете $_SESSION['POST'] = $_POST;
, Не должно быть проблем с переполнением или чем-то подобным. Проблема будет заключаться в том, что php придется десериализовать данные в начале запроса и выполнить повторную сериализацию в конце (как правило, только если произошло изменение). Эта десериализация / сериализация требует времени (это может быть быстро, но все же). Я бы предложил назначить только те значения, которые вы хотите сохранить.
Трудно сказать точно. Но я на 100% уверен, что ответ — нет, они не очень уязвимы. Это предполагает, что вы можете уничтожить сеанс почти сразу. В этом случае вы должны создать сеанс, перенаправить пользователя обратно на старую страницу, проверить наличие переменных сеанса, установить переменные в правильном месте (что в этом случае можно сделать просто с помощью простого текста), а затем уничтожить сеанс. Сессия будет жива только около 10 секунд … минута максимум? и никто не будет достаточно времени, чтобы вытащить с сервера. Если они уже слушают трафик, у вас больше проблем с этим.
Пришлось двигаться, чтобы ответить, потому что это было слишком долго …
Вы можете выполнить проверку имени пользователя с помощью ajax ДО того, как они когда-либо отправят. Это было бы лучше. Не позволяйте им отправлять, если электронная почта уже существует. Просто отправьте на основании keyup
или что-то.
Нет, переменные сеанса хранятся на сервере с помощью различных параметров, таких как сохранение на диск, совместное использование через хранилище redis или memcached и т. Д.
Даже если бы эти данные были скомпрометированы, я не понимаю, как санитария могла бы что-то защитить или смягчить негативные последствия такой атаки.
Если вы действительно беспокоитесь о такой вещи, вы можете уничтожить переменную временного сеанса после того, как закончите ее использовать.