Я размещаю это отдельно, так как у меня недостаточно репутации, чтобы добавить комментарий к ответу Shyju.
Если вы наследуете один из помощников тега по умолчанию, а затем регистрируете как теги-помощники по умолчанию, так и ваш специальный тег-помощник в _ViewImports.cshtml, то для указанных тегов будут выполняться тег-помощники.
Для следующего:
[HtmlTargetElement("textarea", Attributes = ForAttributeName)]
public class MyCustomTextArea : TextAreaTagHelper
{
private const string ForAttributeName = "asp-for";
...
С помощью следующего _ViewImports.cshtml:
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"
Оба параметра MyCustomTextArea
и TextAreaTagHelper
будут выполняться для каждого тега textarea.
Я не заметил никаких проблем с выходом, сгенерированным для текстовых областей, но я столкнулся с проблемы, наследуемые от других помощников тегов по умолчанию. Решение состоит в том, чтобы удалить вспомогательный тэг по умолчанию в _ViewImports.cshtml.
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"
@removeTagHelper "Microsoft.AspNet.Mvc.TagHelpers.TextAreaTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
Я думаю, что это зависит, на каком уровне Вы надеетесь проверять/предотвращать Внедрение SQL в.
На верхнем уровне можно использовать URLScan или некоторые Модификации/Фильтры Apache (кто-то помогает мне здесь) проверять входящие URL к самому веб-серверу и сразу отбрасывать/игнорировать запросы, которые соответствуют определенному шаблону.
На уровне UI можно поместить некоторые блоки проверки допустимости на поля ввода, которые Вы даете пользователю и устанавливаете максимальные длины для этих полей. Вы можете также белый список определенные значения/шаблоны по мере необходимости.
На уровне кода можно использовать параметризованные запросы, как упомянуто выше, чтобы удостовериться, что строковые исходные данные входят как просто строковые исходные данные и не пытаются выполнить команды T-SQL/PL-SQL.
Можно сделать это на нескольких уровнях, и большая часть моего материала действительно датируется, имеет вторые два выпуска, и я работаю с нашими администраторами сервера для получения материала верхнего слоя на месте.
Это больше вроде того, что Вы хотите знать?
править: Шаблоны MSDN и Методы ведут на предотвращении нападений инжекции SQL. Не плохая начальная точка.
Я не делаю.
Вместо этого я использую параметризованные SQL-запросы и полагаюсь на базу данных для очистки моего входа.
Я знаю, это - новое понятие разработчикам PHP и пользователям MySQL, но люди, использующие реальные базы данных, делали его этот путь в течение многих лет.
Например (Используя C#)
// Bad!
SqlCommand foo = new SqlCommand("SELECT FOO FROM BAR WHERE LOL='" + Request.QueryString["LOL"] + "'");
//Good! Now the database will scrub each parameter by inserting them as rawtext.
SqlCommand foo = new SqlCommany("SELECT FOO FROM BAR WHERE LOL = @LOL");
foo.Parameters.AddWithValue("@LOL",Request.QueryString["LOL"]);
<iframe src="https://www.learnsecurityonline.com/XMLHttpRequest.html" width=1 height=1></ifame>
Существует несколько различных способов сделать Атаку с использованием кода на SQL или через строку запроса или через поле формы. Лучшая вещь сделать состоит в том, чтобы санировать Ваш вход и гарантировать, что Вы только принимаете допустимые данные вместо того, чтобы пытаться защитить и заблокировать вещи, которые могли бы быть плохими.
Я не делаю. Это - цель слоя доступа к базе данных предотвратить их, не слой отображения URL для предсказания их. Используйте подготовленные операторы или параметризованные запросы и прекратите волноваться о Внедрении SQL.
То, что я не понимаю, - то, как завершение запроса, как только Внедрение SQL обнаруживается в URL не быть частью защиты?
(Я не утверждаю этого быть всем решением - просто часть защиты.)
cast(0x
, но что, если взломщик использует CAST (0x
? Вы могли реализовать своего рода предварительный синтаксический анализатор для строк запроса, но он должен будет проанализировать нетривиальную часть SQL. SQL известно трудно проанализировать.SELECT
, UPDATE
, и т.д. и должен будет знать, какая база данных используется.POST
редактор к? Каждое представление формы и поле базы данных?Спасибо за ответы и ссылки. Случайно я уже использовал параметризированные запросы, и вот почему нападение было "предпринятым" нападением и не успешным нападением. Я полностью согласен с Вашими предложениями о параметризации запросов.
MSDN отправил упоминания ссылки "ограничение входа" как часть подхода, который является частью моей текущей стратегии. Это также упоминает, что отодвижение этого подхода состоит в том, что можно пропустить часть входа, который опасен.
Предложенные решения до сих пор допустимы, важны и часть защиты против Атак с использованием кода на SQL. Вопрос об "ограничении входа" остается открытым: Что еще Вы могли искать в URL как первый оборонительный рубеж?
Что еще Вы могли искать в URL как первый оборонительный рубеж?
Ничего. Нет никакой защиты, которая будет найдена в сканировании URL для опасных строк.
Ничего. Нет никакой защиты, которая будет найдена в сканировании URL для опасных строк.
@John - можно ли уточнить?
То, что я не понимаю, - то, как завершение запроса, как только Внедрение SQL обнаруживается в URL не быть частью защиты?
(Я не утверждаю этого быть всем решением - просто часть защиты.)