2013-08-30 2 views
-1

Чтобы предотвратить атаки SQL-инъекций до выполнения запросов (включая INSERT-теги), я использую mysql_real_escape_string.php/mysql real_escape и специальные символы

Проблема заключается в том, что если данные для ввода имеют специальный символ, MYSQL, похоже, вставляет косую черту в базу данных при вставке.

Затем, когда я показываю поле на веб-странице, появляется косая черта.

В идеале, я не хочу иметь косую черту перед специальными символами в таблицах Dbase, так как это потребует много текущего обслуживания, чтобы удалить косую черту при отображении данных и т.д.

Есть в любом случае хранить в базе данных без включения обратной косой черты?

как пример:

$field = "bob's data"; 
...establish database connection 
$field = mysql_real_escape_string($field); 
$sql="INSERT INTO table (field) VALUES ('$field')"; 
if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

путы "боб \ 's данных" в базе данных.

Есть ли способ обрабатывать это по-другому, чтобы не заканчивать косой чертой в базе данных?

Примечание: Я знаю, что предпочтительный способ выполнения qureris - использовать параметризованные запросы или pdo, но по разным причинам не может сделать этого в этом случае, поскольку это огромный старый сайт.

Благодарим вас за любые предложения.

+0

Google для 'magic_quotes' – zerkms

+0

Вы действительно назначить' $ field' буквально так, или это взялось '$ _GET' или' $ _POST'? Если это произошло от ввода клиента, проблема 'magic_quotes' может быть проблемой, как упоминает @zerkms. Если это буквально, я не думаю, что это происходит, как вы говорите. – Barmar

+0

Это сообщение отправлено из текстового поля. Я просто написал это так, чтобы проиллюстрировать случай, когда вход имеет апостроф. Я не думаю, что волшебные цитаты продолжаются. – user1904273

ответ

0

Я думаю, вы можете использовать что-то вроде этого, прежде чем обрабатывать любые объекты GET, POST, COOKIE или REQUEST.

function removeMagiQuotes() 
{ 
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); 
} 
} 
Смежные вопросы