Ошибка: макро-имена должны быть идентификаторами с помощью #ifdef 0

Параметрированный запрос И проверка ввода - это путь. Существует множество сценариев, в которых может произойти SQL-инъекция, хотя используется mysql_real_escape_string().

Эти примеры уязвимы для SQL-инъекции:

$offset = isset($_GET['o']) ? $_GET['o'] : 0;
$offset = mysql_real_escape_string($offset);
RunQuery("SELECT userid, username FROM sql_injection_test LIMIT $offset, 10");

или

$order = isset($_GET['o']) ? $_GET['o'] : 'userid';
$order = mysql_real_escape_string($order);
RunQuery("SELECT userid, username FROM sql_injection_test ORDER BY `$order`");

В обоих случаях вы не можете использовать ' для защиты инкапсуляции.

Источник : Непредвиденная инъекция SQL (при эвакуации Недостаточно)

36
задан Brian Tompsett - 汤莱恩 27 November 2015 в 11:33
поделиться

2 ответа

#ifdef директива используется для проверки , если символ препроцессора определяется. стандарт (C11 6.4.2 Identifiers) мандаты, которые идентификаторы не должны запускать с цифры:

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters>
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

правильная форма для использования препроцессора для блокирования кода:

#if 0
: : :
#endif

можно также использовать:

#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif

, но необходимо быть уверены, что символы будут не быть непреднамеренно установленными кодом кроме собственного. Другими словами, не используйте что-то как NOTUSED или DONOTCOMPILE, который могут также использовать другие. Для сейфа #if, опция должна быть предпочтена.

60
ответ дан paxdiablo 27 November 2019 в 05:36
поделиться

Используйте следующее для оценки выражения (постоянный 0 оценивает ко лжи).

#if 0
 ...
#endif
13
ответ дан tvanfosson 27 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: