В PHP есть «мертвая» функция, которая автоматически экранирует данные POST / GET и называется Магические кавычки .Идея состояла в том, чтобы не допустить возникновения распространенных типов SQL-инъекций.
В действительности вы получаете перемешанные данные, и SQL-инъекция все еще была очень возможной, в зависимости от реализации.Разработчики PHP быстро поняли это, устарели и отказались от его использования.
При правильной установке PHP это должно быть абсолютно отключено!Если у вас нет доступа к PHP.ini для установки magic_quotes_gpc off
, то вы можете поместить это в верхнюю часть своего кода:
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
Взят от: http://www.php.net/manual/en/security.magicquotes.disabling.php
Сейчас, к вашей проблеме внедрения SQL.Видите ли, есть куда больше поводов для беспокойства, чем просто цитаты.Вы не указываете, какую базу данных вы используете, но это не имеет значения.Лучший способ избежать проблем с внедрением - использование подготовленных / параметризованных запросов.
Подготовленные запросы - это запросы, отправляемые на сервер с параметрами, значения которых отправляются позже.
INSERT INTO someTable (field1, field2) VALUES (:field1, :field2);
Обратите внимание на :field1
и :field2
, так как они являются параметрами.Когда я выполню это утверждение, они будут заменены правильными значениями.Поскольку сервер это делает, экранирование не требуется (и / или это происходит в фоновом режиме, в зависимости от используемого вами уровня БД).
Самый простой способ реализовать это в PHP - использоватьPDO.Как использовать PDO слишком долго для этой коробки, поэтому я укажу вам направление обучения:
http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/