Спасибо за единственный ценный комментарий по теме.Baton, никто в здравом уме не использует MySQL API напрямую, используются обёртки, в них же делается проверка один раз на успешность выполнения запроса.
http://habrahabr.ru/post/148701/#comment_5051417А в чем глючность mysqli?
Какие ещё параметры, дружок? На уровне формирования SQL-запроса нам должно быть уже всё равно откуда пришли данные.когда они передаются через параметры
Потому, что задачу по безопасности нельзя решать в такой общей постановке как "пересечение границы данных и кода".А зачем эту фигню классифицировать? Это примерно как перечислять предметы, которые могут украсть из квартиры, если не поставить замок.
Инъекция - это пересечение границы данных и кода, всё. То же переполнение буфера в коде на С, кстати, ровно то же самое.
function tep_db_perform($table, $data, $action = 'insert', $parameters = '', $link = 'db_link') {
reset($data);
if ($action == 'insert') {
$query = 'insert into ' . $table . ' (';
while (list($columns, ) = each($data)) {
$query .= $columns . ', ';
}
$query = substr($query, 0, -2) . ') values (';
reset($data);
while (list(, $value) = each($data)) {
switch ((string)$value) {
case 'now()':
$query .= 'now(), ';
break;
case 'null':
$query .= 'null, ';
break;
default:
$query .= '\'' . tep_db_input($value) . '\', ';
break;
}
}
$query = substr($query, 0, -2) . ')';
} elseif ($action == 'update') {
$query = 'update ' . $table . ' set ';
while (list($columns, $value) = each($data)) {
switch ((string)$value) {
case 'now()':
$query .= $columns . ' = now(), ';
break;
case 'null':
$query .= $columns .= ' = null, ';
break;
default:
$query .= $columns . ' = \'' . tep_db_input($value) . '\', ';
break;
}
}
$query = substr($query, 0, -2) . ' where ' . $parameters;
}
return tep_db_query($query, $link);
}
function tep_db_input($string, $link = 'db_link') {
global $$link;
if (function_exists('mysql_real_escape_string')) {
return mysql_real_escape_string($string, $$link);
} elseif (function_exists('mysql_escape_string')) {
return mysql_escape_string($string);
}
return addslashes($string);
}
tep_db_perform('table', array(
'type' => $_GET['type'],
'price' => $_GET['max_price'],
));
tep_db_perform('table', array(
'type' => $_GET['type'],
'price' => $_GET['max_price'],
),
'update',
sprintf('id=%d', $_GET['id'])
);
слишком сильное утверждение.1.данные подставляем в запрос только через плейсхолдеры