2012-06-14 1 views
2

В сценарии входа я нашел onlline, создатель добавил эту функцию, чтобы предотвратить атаки SQL-инъекций.Устаревший превентор SQL-инъекций?

function Fix($str) { 
    $str = trim($str); 
    if(get_magic_quotes_gpc()) { 
     $str = stripslashes($str); 
    } 
    return mysql_real_escape_string($str); 
} 

Так как я прочитал, что magic_quotes_gpc есть (или был) удален, он чувствует, что эта функция немного устарела. Не просто ли использовать mysqli_real_escape_string($user_input) достаточную безопасность?

ответ

2

mysql_real_escape_string не хватает во всех ситуациях, но это, безусловно, очень хороший друг. лучше решение использует Prepared Statements

//example from http://php.net/manual/en/pdo.prepared-statements.php 

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); 
$stmt->bindParam(1, $name); 
$stmt->bindParam(2, $value); 

// insert one row 
$name = 'one'; 
$value = 1; 
$stmt->execute(); 

Кроме того, чтобы не забыть HTMLPurifier, который может быть использован для отмены недопустимые/подозрительных символов.

mysql_real_escape_string() versus Prepared Statements

mysql_real_escape_string() склонны к такой же вопросы, затрагивающие addslashes().

Ответ С Крис Шифлетт (Security Expert)

1

magic_quotes_gpc осуждается в 5.3 и удалены в 5.4. Если ваш код предназначен для распространения (т. Е. У вас нет контроля над средой, в которой он будет использоваться), лучше учитывать возможность того, что он будет запущен в 5.3 с включенными магическими кавычками. Если это внутреннее приложение, и у вас есть контроль над средой, и вы знаете, что магические кавычки отключены, нет необходимости их проверять.

Смежные вопросы