Необходим уклонение пользователя от ввода данных из базы данных?

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

So: (sql::escape() содержит мою функцию экранирования)

$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table` 
             (`foo`,`bar`) 
             VALUES 
             ('foobar','".sql::escape($userinput)."')");

// insert php/mysql to fetch `table`.`bar` into $output here

mysql_query("INSERT INTO `table2` 
            (`foo`,`bar`) 
            VALUES
            ('foobar','".$output."')");

Автоматически ли MySQL экранирует их вывод или что-то в этом роде, или я должен экранироваться и во втором запросе?

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

EDIT

Моя функция escape function

static function escape($string){

    if(get_magic_quotes_gpc()) 
        $string = stripslashes($string); 

    return mysql_real_escape_string($string);

}
15
задан Kokos 16 September 2011 в 12:10
поделиться