2010-06-30 2 views
1

Нужно ли мне избегать моих данных объекта, если я сериализую для инъекции mysql?Является ли PHP Serialized Data Data Clean для инъекций Mysql?

т.е.

class Object 
{ 
    public $description; 
} 

$obj = new Object(); 
$obj->description = mysql_real_escape_string("this is my crazy string with lot's of bad // characters"); 

$data = serialize($obj); // <-- $data will be stored in DB 

или это будет хватай:

class Object 
{ 
    public $description; 
} 

$obj = new Object(); 
$obj->description = "this is my crazy string with lot's of bad // characters"; 

$data = serialize($obj); 
+1

FWIW, в «лоте» не должно быть апострофа, поэтому в любом случае это безопасно. (просто шутите!) –

+0

@Bill lol. Это весело. Я не мог думать ни о чем писать. Итак, вы меня достали;) –

ответ

2

Run mysql_real_escape_string() после того как вы сериализованная. Это строка, которую вы собираетесь поместить в базу данных в конце концов.

+0

имеет смысл –

+1

Всегда запускайте mysql_real_escape_string на входе или, еще лучше, используйте подготовленные операторы. Чем больше привычки вы делаете, тем лучше. –

3

Да, вы должны избегать этого (или использовать подготовленные заявления).

<?php 
$obj = (object) array("--'--'" => "--'--"); 
var_dump(serialize($obj)); 

дает

 
string(44) "O:8:"stdClass":1:{s:6:"--'--'";s:5:"--'--";}" 

Как вы можете видеть, нет никакой возможности избежать.

На боковой ноте вы должны использовать расширение mysqli для нового кода, а не расширение mysql.

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