Если я храню сериализованный массив в базе данных 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);
Всегда используйте mysql_real_escape_string
при работе со строками, которые могут иметь кавычки / слэши. Если вы этого не сделаете, вы получите взломанные / злонамеренные запросы. Вывод serialize()
иногда имеет кавычки / слэши, поэтому вы должны использовать его. Однако нет необходимости в сериализации каждого элемента массива заранее.
$details['name'] = $_POST['name']; $details['email'] = $_POST['email']; $details['phone'] = $_POST['phone']; $serializedDetails = mysql_real_escape_string(serialize($details));
Как пример: сериализация «привет» даст вам: 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);