2013-11-01 230 views
0

Поэтому иногда, когда я передаю переменные со страницы на страницу, если я хочу передать переменную в действие формы, я бы просто сохранил ее в элементе <input type="hidden">. Это, как правило, хорошо работает, но я понял, что кто-то может легко перейти к разметке HTML и просто изменить hidden, чтобы набрать текст, и поэтому они могли бы легко редактировать передаваемое (это может быть плохо, если, скажем, они редактируют свой собственный профиль, и я сохранил в скрытом поле ввода их ProfileID, и они изменили его на чужой)Защита скрытых текстовых полей ввода

Мне было интересно, есть ли наилучшая практика для решения этой проблемы? Я поговорил с некоторыми сотрудниками, и они сказали, чтобы они делали проверки на сервере, когда они отправляли форму, чтобы убедиться, что они не передают неправильную информацию. Лучше всего это сделать или есть другие способы?

+1

Являются ли «сеансы» вне области вашего проекта? –

+1

вы можете кодировать/шифровать значение – Einacio

+0

@ShankarDamodaran Ну, мы много используем сеансы, но, как я уже сказал, я хранил его во вложенном виде, поэтому его можно передать через форму. Я также думаю, что временами мы уничтожаем сессию ... и мои коллеги рассказывали мне, как можно манипулировать переменными сеанса? – aug

ответ

3

Безопасность, вы не может доверять любой информации, поступающей от клиента, как вы правильно отметили. Это означает, что вам необходимо сохранить серверную сторону при вызове таких страниц.

Общепринятой практикой является предоставление каждому клиенту идентификатора сеанса в файле cookie и на стороне сервера, вы можете связать всю конфиденциальную информацию с этим идентификатором сеанса. Идентификатор сеанса должен быть случайным, потому что, если он был последовательным, вы могли бы просто изменить его значение и захватить чужую сессию наугад.

Существует несколько способов хранения информации относительно идентификатора сеанса. Самый гибкий в PHP и, вероятно, самый простой в реализации, - это использование встроенной поддержки сеанса. PHP обрабатывает идентификатор сеанса для вас и позволяет хранить любой сериализуемый объект в суперкласне $_SESSION. Это хорошее решение, так как данные сеанса часто хранятся во временной папке вашего сервера, и если это общий сервер, скорее всего, другие сайты на этом сервере теоретически могут отслеживать и просматривать или даже манипулировать данными сеанса. Конечно, если то, что вы делаете, очень малоэффективно, тогда маловероятно, чтобы кто-то зашел так далеко, как арендовать тот же сервер, чтобы просто с вами пообщаться. Тем не менее, например, поставщики OAuth рекомендуют не хранить токены OAuth в хранилище $_SESSION в общедоступных средах.

<?php 
session_start(); 
// place anything you need to save between pages in $_SESSION 
$_SESSION["foo"] = array("bar", "baz"); 
// until you unset $_SESSION["foo"], it will be available in every page that called 
// session_start(). 
?> 

Это хорошая практика, чтобы назвать session_destroy при входе пользователей, чтобы убедиться, что их данные сеанса не существует дольше, чем это необходимо.

С другой стороны, вы также можете хранить информацию в базе данных, например MySQL. Это лучше по безопасности, так как вам следует убежать от любого хоста, у которого нет отдельных пользователей базы данных или отдельных баз данных для каждого пользователя сервера, и вы можете быть уверены, что никто другой не сможет изменить (или даже просто увидеть) информацию о сеансе. Однако это не так гибко, поскольку вам нужна структура таблицы для хранения всего, что вы хотите сохранить.

Смежные вопросы