Параметрированный запрос И проверка ввода - это путь. Существует множество сценариев, в которых может произойти 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 (при эвакуации Недостаточно)
#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
, опция должна быть предпочтена.
Используйте следующее для оценки выражения (постоянный 0 оценивает ко лжи).
#if 0
...
#endif