2013-09-24 2 views
1

Мне нужно хранить структурированные данные в файле cookie.
избранные страницы некоторых каталогов. данные { {id,type} , {id,type} , ... }
В моем коде мне нужно вернуть его в массив. поэтому я использую функцию unserialize() для восстановления данных.
Есть ли способ предотвратить инъекцию объекта? любая альтернатива для функции несериализации?Как избежать инъекций объектов из файлов cookie?

+1

Вы уверены, что cookie - это место для хранения этого? (подсказка: возможно, нет) –

ответ

1

Есть ли способ, чтобы предотвратить введение объекта

Когда вы десериализируются объект, PHP будет вызывать метод __wakeup в определении класса (это не хранится в куки, но в вашем PHP класс файл на сервере).

Возможно ли, чтобы кто-то изменил класс сериализованного объекта и правильно угадал, вызывая функцию __wakeup для выполнения какой-либо задачи? Да. Обычно функции __wakeup просто соединяются с ресурсом, поэтому это может быть или не быть большим делом, но зачем рисковать? Просто сохраните массив как JSON с json_encode($yourdata) и верните его с помощью json_decode($cookiedata, true)

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

+0

спасибо. по какой-то причине я не думал об использовании json_decode: -? – yossi

0

То, как я думаю о том, чтобы зашифровать информацию печенья, чтобы запретить пользователю знать, что, черт возьми, он/она редактирования

1

Ну, если у вас есть определенная структура, как ваш массив должен посмотрите, тогда просто убедитесь, что строка, которую вы несериализуете, действительно является массивом, когда вы повторяете ее, просто проверьте тип значения (id -> int, type -> string).

Плюс, я думаю, что json_encode будет лучше в вашем случае данных, он будет меньше по размеру и быстрее в декодировании (и вы сможете работать с ним на стороне клиента).

+1

Ничто из этого не останавливает пользователя, редактирующего файл cookie –

+1

. Ничто не мешает клиенту испортить любой куки-файл. Если вы хотите быть уверены, что эти данные не были отредактированы клиентом, сохраните его в сеансе. –

-1

Если вы не хотите, чтобы пользователь мог изменять данные, не предоставляйте данные пользователю в первую очередь. Используйте $_SESSION, базу данных или напишите информацию в файл на своем сервере.

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