2016-03-08 2 views
0

В Wordpress я замечаю, что у них есть функция под названием wp_magic_quotes() (docs).

Вот пример:

// If already slashed, strip. 
if (get_magic_quotes_gpc()) { 
    $_GET = stripslashes_deep($_GET ); 
    $_POST = stripslashes_deep($_POST ); 
    $_COOKIE = stripslashes_deep($_COOKIE); 
} 

// Escape with wpdb. 
$_GET = add_magic_quotes($_GET ); 
$_POST = add_magic_quotes($_POST ); 
$_COOKIE = add_magic_quotes($_COOKIE); 
$_SERVER = add_magic_quotes($_SERVER); 

В моем собственном коде (отдельно от Wordpress), есть ли польза делать это? Какие-либо преимущества в плане безопасности?

Возможно, Wordpress делает это, потому что их программное обеспечение используется во многих средах, где им необходимо сделать их согласованными.

Мое программное обеспечение находится в одной среде, и я использую PDO-соединение для моей базы данных, которая уже ускользает от данных.

Я просто пытаюсь работать, если есть какая-то польза от такого рода вещей.

+2

на основе истории безопасности Wordpress, я бы не подумал, что это слишком полезно ... –

+2

автоматически делает что-либо глобальную переменную - плохая идея. –

ответ

2

Магические кавычки по глобальным переменным обычно представляют собой ленивую безопасность и вызывают худшие проблемы в будущем. Я бы предположил, что WordPress добавил их, потому что они не доверяют разработчикам плагинов для правильной санации ввода; или у них много устаревшего кода, который ожидает включения magic_quotes.

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

<select name="number"> 
    <option value="1">Thing 1</option> 
    <option value="2">Thing 2</option> 
    <option value="3">Thing 3</option> 
</select> 

Вы должны фильтровать только целые числа между 1 и 3.

$_SAFE = array(); 
$_SAFE['number'] = filter_var($_POST['number'], FILTER_SANITIZE_NUMBER_INT); 
if($_SAFE['number'] < 1 || $_SAFE['number'] > 3) 
{ 
    //user is doing something evil, block them, and die. 
} 

Затем дезинфицировать каждое использование для возможных инъекций, в случае, если вы пропустили что-то ранее. Для SQL, которые означают подготовленные инструкции, передающие все переменные в виде типизированных параметров с использованием PDO или MySQLi. Для вывода в браузер, что означает htmlentities().

1

Магические кавычки были удалены с PHP 5.4.0. http://php.net/manual/en/security.magicquotes.php объясняет, почему и рекомендует альтерналисты, такие как mysql_real_escape_string. Санировать ваш вход - отличная идея, если это сделано правильно. Удачи!

+3

mysql_real_escape_string также устарел как небезопасный. Текущая передовая практика заключается в использовании подготовленных операторов (некоторые утверждают, что подготовленные операторы, которые вызывают только хранимые процедуры). –

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