Санитарная обработка при хранении сериализованного массива - PullRequest
4 голосов
/ 23 ноября 2011

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

Например:

$details['name'] = mysql_real_escape_string($_POST['name']);
$details['email'] = mysql_real_escape_string($_POST['email']);
$details['phone'] = mysql_real_escape_string($_POST['phone']);

$serializedDetails = serialize($details);

// Do SQL query

Или

$details['name'] = $_POST['name'];
$details['email'] = $_POST['email'];
$details['phone'] = $_POST['phone'];

$serializedDetails = mysql_real_escape_string(serialize($details));

Или, может быть, на секунду я могу просто сделать:

$serializedDetails = serialize($details);

1 Ответ

8 голосов
/ 23 ноября 2011

Всегда используйте mysql_real_escape_string при работе со строками, которые могут иметь кавычки / косые черты.Если вы этого не сделаете, вы получите сломанные / вредоносные запросы.Вывод serialize() иногда имеет кавычки / косые черты, поэтому вы должны его использовать.Нет необходимости заранее сериализовывать каждый элемент массива.

$details['name']  = $_POST['name'];
$details['email'] = $_POST['email'];
$details['phone'] = $_POST['phone'];

$serializedDetails = mysql_real_escape_string(serialize($details));

Как пример: сериализация "hello" даст вам: s:5:"hello".

$data  = 's:5:"hello"';
$query = 'INSERT INTO tbl (data) VALUES ("' . $data . '")';

// leads to a syntax error from mysql
// (plus it's a huge security hole)
mysql_query($query);
...