Кстати, о SQL-инъекциях. Я часто использую функцию для выполнения запросов, увиденную мною в книге Котерова. Изначально расчитана на MySQL, но легко меняется и для другой СУБД.
Выглядит так: mysql_qw('INSERT INTO users (name) VALUES (?)', $u_name);
Работает аналогично sprintf: заменяет символы ? в строке запроса (1й параметр функции) на соответствующие ему значения и выполняет запрос. Перед заменой значения обрабатываются mysql_escape_string() и заключаются в кавычки.
Код функции:
$v) {
if (!$i) continue; // это шаблон
if (is_int($v)) continue; // целые числа не нужно экранировать
$args[$i] = "'".mysql_escape_string($v)."'";
}
// На всякий случай запорняем 20 последних аргументов недопустимыми
// значениями, чтобы в случае, если число "?" превышает количество
// параметров, выдавалась ошибка SQL-запроса (поможет при отладке).
for ($i=$c=count($args)-1; $i<$c+20; $i++)
$args[$i+1] = "UNKNOWN_PLACEHOLDER_$i";
Хорошая статья, напомнила мне мой период паранои в первые месяцы программирования на PHP.
Пожелания к статье: больше примеров "на слониках".
Например, сказано что register_globals - зло, а примеры взлома с их использованием не приведены.
Фраза "валидируйте все, что вводит пользователь" пугает своей сложностью =) Я бы сказал "Проверяйте" и "Trust no one" =)
Статья неплохая, однако: было б лучше, если Вы обосновывали некоторые положения простыми примерами, так сказать "на слониках". Например, касательно register_globals: то что это плохо Вы сказали, а _реального примера_ того, как это могут использовать для взлома нет.
А лучше сюда - http://www.habrahabr.ru/blog/i_am_clever…
Выглядит так:
mysql_qw('INSERT INTO users (name) VALUES (?)', $u_name);
Работает аналогично sprintf: заменяет символы ? в строке запроса (1й параметр функции) на соответствующие ему значения и выполняет запрос. Перед заменой значения обрабатываются mysql_escape_string() и заключаются в кавычки.
Код функции:
$v) {
if (!$i) continue; // это шаблон
if (is_int($v)) continue; // целые числа не нужно экранировать
$args[$i] = "'".mysql_escape_string($v)."'";
}
// На всякий случай запорняем 20 последних аргументов недопустимыми
// значениями, чтобы в случае, если число "?" превышает количество
// параметров, выдавалась ошибка SQL-запроса (поможет при отладке).
for ($i=$c=count($args)-1; $i<$c+20; $i++)
$args[$i+1] = "UNKNOWN_PLACEHOLDER_$i";
// Формируем SQL-запрос.
return call_user_func_array("sprintf", $args);
Пожелания к статье: больше примеров "на слониках".
Например, сказано что register_globals - зло, а примеры взлома с их использованием не приведены.
Фраза "валидируйте все, что вводит пользователь" пугает своей сложностью =) Я бы сказал "Проверяйте" и "Trust no one" =)
Это неправильный перевод слова "artist"? Если нет - то зачем же нужен актер?
Другой вопрос - играть пьяным в дупло или слегка пьяненьким.