GET и POST данные - это данные, напрямую отправленные пользователем. Вы получаете все это без каких-либо проверок или проверок между пользователем и вашей программой. Даже если вы должны были проверить форму, которая должна исходить от данных, злоумышленник может вручную создать запрос с любыми данными, которые он хочет. Таким образом, вы всегда должны обрабатывать данные запроса как ненадежный пользовательский ввод.
Существует ряд атак, в которых кодер забывает, что данные запроса ненадежны, но самым известным является SQL-инъекция. Основной причиной внедрения SQL-кода является построение запроса путем объединения строк вручную, некоторые из которых являются ненадежным пользовательским вводом. Это означает, что вы указываете своей базе данных выполнить ненадежный ввод данных пользователем.
Наивным решением для внедрения SQL-кода является проверка входных данных, а затем их объединение в строку запроса, но это тоже плохая форма. Вы полагаетесь на свою логику проверки, чтобы сделать строку безопасной, и если вы ее неправильно используете - или логика глючит, - то вы снова подвергаетесь атакам.
Правильное решение - отделить ваш запрос от содержащихся в нем данных. Практически все адаптеры баз данных поддерживают этот подход, и если ваш по какой-то причине не подходит, он не пригоден для использования. Наиболее распространенная идиома (без определенного языка):
myDB.query ("выберите * из материала, где id =?", [42]);
Это гарантирует (в такой системе), что параметры не выполняются. Строка запроса построена из полностью доверенных данных, а ненадежные данные отделены. В худшем случае этот подход, применяемый к неправильному вводу, может привести к неверным данным, а не к неправильной команде.
Этот подход к предотвращению внедрения SQL-кода подчеркивает центральный принцип, который применяется ко всем видам атак данных запроса: данные запроса не ваши и не безопасны. При обработке любого пользовательского ввода, включая данные запроса, всегда предполагайте, что оно исходит от злоумышленника с глубокими знаниями вашей системы. Это может показаться параноиком, но это держит вас в безопасности.