Итак, я знаю о 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);
}