Уязвимость в PHP magic_quotes_gpc - PullRequest
4 голосов
/ 24 января 2010

Я был назначен в один из устаревших веб-приложений моей компании, и после дня или двух осмотра источника я обнаружил вектор SQL-инъекции, подобный следующему:

mysql_query("SELECT * FROM foo WHERE bar='" . $_GET['baz'] . "'");

Я пытался выполнить тест SQL-инъекции для этого, но это не удалось из-за включения magic_quotes_gpc модуля PHP.

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

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

Ответы [ 3 ]

8 голосов
/ 24 января 2010

Обычным способом перехода сайтов с magic_quotes_gpc является добавление функции-оболочки:

function m($s) {
    if (get_magic_quotes_gpc())
        $s= stripslashes($s);
    return mysql_real_escape_string($s);
}

mysql_query("SELECT * FROM foo WHERE bar='".m($_GET['baz'])."'");

Это устранит проблему, связанную с тем, что addslashes не будет осведомлен о наборе символов, что в некоторых случаях может привести к его уязвимости, и, как правило, заставит код продолжать «работать», как и раньше.

Однако в долгосрочной перспективе полагаться на экранирование ввода невозможно, так как он будет умножать косые черты на входные строки, которые вы не вставляете в базу данных, и не сможет избежать строк, которые вы вставляете в базу данных из других источников. Это реальная причина, по которой magic_quotes_gpc неправильный: он применяет кодирование выходного каскада к входному каскаду.

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

0 голосов
/ 24 января 2010

Я бы добавил строку в начале, которая гарантирует, что magic_quotes включены, даже если они отключены в конфигурации сервера. Тогда вы будете более или менее в безопасности.

0 голосов
/ 24 января 2010

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

...