ВАЖНО
. Лучший способ предотвратить SQL Injection - использовать подготовленные выражения вместо экранирования , поскольку демонстрирует принятый ответ .
Существуют библиотеки, такие как Aura.Sql и EasyDB , которые позволяют разработчикам легче использовать подготовленные инструкции. Чтобы узнать больше о том, почему подготовленные операторы лучше в останавливать SQL-инъекцию , см. этот
mysql_real_escape_string()
обход и недавно зафиксированные уязвимости Unicode SQL Injection в WordPress .Предотвращение впрыска - mysql_real_escape_string ()
У PHP есть специально созданная функция для предотвращения этих атак. Все, что вам нужно сделать, это использовать функцию функции
mysql_real_escape_string
.
mysql_real_escape_string
берет строку, которая будет использоваться в запросе MySQL, и возвращает ту же строку со всеми попытками внедрения SQL безопасно сбежал. В принципе, это заменит эти неприятные кавычки ('), которые пользователь может ввести с помощью заменителя в MySQL, сэкономленная цитата.ПРИМЕЧАНИЕ: вы должны подключиться к базе данных, чтобы использовать эту функцию!
// Подключение к MySQL
$name_bad = "' OR 1'"; $name_bad = mysql_real_escape_string($name_bad); $query_bad = "SELECT * FROM customers WHERE username = '$name_bad'"; echo "Escaped Bad Injection:
" . $query_bad . "
"; $name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; $name_evil = mysql_real_escape_string($name_evil); $query_evil = "SELECT * FROM customers WHERE username = '$name_evil'"; echo "Escaped Evil Injection:
" . $query_evil;Более подробную информацию вы найдете в MySQL - SQL Injection Prevention .
Заголовки стандарта C++ не имеют суффикса ".h". Я полагаю, что причина состоит в том, что были многие, различные предварительные стандартные реализации, которые повредит стандарт. Таким образом вместо того, чтобы требовать, чтобы поставщики изменили свой выход "iostream.h" (например), заголовок, чтобы быть совместимыми стандартами (который повредил бы код их существующего пользователя), комитет по стандартам решил, что они отбросят суффикс (который, я полагаю не тогда, что существующая реализация уже сделала).
Тот путь, существующие, нестандартные программы продолжили бы работать, пользуясь нестандартными библиотеками поставщика. Когда пользователь хотел сделать их стандарты программ совместимыми, один из шагов, которые они сделают, должен измениться" #include
" директива для отбрасывания суффикса ".h".
Так
#include <iostream> // include the standard library version
#include <iostream.h> // include a vendor specific version (which by
// now might well be the same)
, Поскольку другие ответы упомянули, писатели нестандартных библиотек могут выбрать или соглашение о присвоении имен, но я думал бы, что они захотят продолжить использовать ".h" или ".hpp" (поскольку Повышение сделало) по паре причин:
Примечание, что подобная проблема произошла, когда комитет пошел для добавления хеша, отображается на STL - они нашли, что уже существуют много (отличающиеся) hash_map
реализации, которые существуют, таким образом, вместо предложения стандартного, которое повреждает много материала там сегодня, они называют стандартную реализацию" unordered_map
". Пространства имен, как предполагалось, помогли предотвратить этот тип перехода через обручи, но это, казалось, не работало достаточно хорошо (или не использовалось достаточно хорошо), чтобы позволить им использовать более естественное имя, не повреждая много кода.
Примечание, что для заголовков 'C', C++ позволяет Вам включать или <cxxxxxx>
или <xxxxxx.h>
вариант. Тот, который запускается с 'c' и не имеет никакого суффикса ".h", поместил их объявления в std
пространство имен (и возможно глобальное пространство имен), те с суффиксом ".h" ставят имена в глобальном пространстве имен (некоторые компиляторы также ставят имена в std
пространство имен - неясно мне, если это стандартно совместимый, хотя я не вижу вреда).
Если файл называют tuple
тогда, Вам нужно к #include <tuple>
, если он назвал tuple.h
тогда, Вам нужно к #include <tuple.h>
, Это настолько просто. Вы не опускаете расширения.
Это включает файл, который просто называют "кортежем" - сам файл испытывает недостаток в расширении.
предполагаемый стандарт для C++ включает файлы, должен назвать их без.h расширения; многие писатели библиотеки следуют этому стандарту (STL, и т.д.), но некоторые не делают.
Нет ничего специального продолжения. Файл просто называют tuple
.
причина этого..., что стандартные заголовки библиотеки не имеют никакого расширения файла, из-за namespace
с.
Пространства имен были добавлены к стандарту C++ поздно в игре с C++ 98 стандартов, включая std
пространство имен, в котором находятся все стандартные объекты библиотеки.
, Когда стандартная библиотека была перемещена в std
пространство имен, которое означало, что весь существующий код C++ повредится, так как все это ожидало, что библиотека будет в глобальном пространстве имен. Решение состояло в том, чтобы уехать, старое "делает" одни только заголовочные файлы и обеспечивает namespaced библиотеку в файлах, которые не имеют никакого расширения.
Таким образом, старый код, который был бы #include<iosteam.h>
, мог ожидать глобальное cout
, в то время как новый код мог #include<iostream>
и ожидать std::cout
.
Мое понимание было то, что #include кортеж "укажет" на tuple.h.
Проверяют это: iostream по сравнению с iostream.h
В дополнительном к прекрасным ответам, уже отправленным, нужно отметить, что стандарт C++ не требует, чтобы направляющий "#include <iostream>
" считал файл, названный "iostream", или даже "iostream.h". Это можно было назвать "fuzzball". Или, никакой соответствующий файл не может существовать и определения быть встроенным в компилятор и активированным включать директивой.
Ребята,
Я думаю, что дело в следующем: #include
Обратите внимание, что я могу ошибаться ... Я так думаю, что это работает (в Forte CC на Solaris).