уязвим ли этот код для SQL-инъекций?

#asp.net #sql #sql-server #security #code-injection

#asp.net #sql #sql-сервер #Безопасность #внедрение кода

Вопрос:

страница загружается, вам нужно заполнить некоторые текстовые поля, а затем нажать Добавить:

 tbSpyReports spyReport = new tbSpyReports();
spyReport.sgCityLevel = Convert.ToInt32(tbCityLevel.Text);
spyReport.sgCityName = tbCityName_insert.Text; 
....
spyReport.insert();
Response.Redirect(Request.RawUrl);


SqlConnection con = ikaConn.getConn();
SqlCommand command = new SqlCommand("INSERT INTO spyReports(cityName, playerName, cityId,      islandId, cordX, cordY, "   "cityLevel, cityWall, cityWarehouse, Wood, Wine, Marble, Crystal, Sulfur, hasArmies) VALUES("   "@cityName, @playerName, @cityId, @islandId, @cordX, @cordY, "   "@cityLevel, @cityWall, @cityWarehouse, @Wood, @Wine, @Marble, @Crystal, @Sulfur, @hasArmies)", con);
command.Parameters.Add(new SqlParameter("cityName", this.cityName));
command.Parameters.Add(new SqlParameter("playerName", this.playerName));
....
command.ExecuteNonQuery();
command.Dispose();
  

Комментарии:

1. Вы используете параметризованный запрос, так что все в порядке.

2. Вы должны потратить 5 минут на чтение о том, что такое Sql-инъекции. Вы быстро поймете, что ваш код не является.

3. @CraigW. Валамас, так что, даже если я разделю запрос на умножение строк, используя , а затем используя параметры, я в порядке? также, что именно там происходит, что делает его «безопасным»

4. Вы не принимаете неаналитизированные пользовательские значения и не делаете их частью своего запроса. Вот почему ваш код безопасен.

Ответ №1:

Он не должен быть уязвим для традиционной SQL-инъекции этой формы:

 statement = "SELECT * FROM users WHERE name ='"   userName   "';"
  

поскольку вы используете параметризованные запросы.

Комментарии:

1. Не возражаете, объяснив несколько отрицательных отзывов? Я полагаю, что я правильно ответил на вопрос. Это ссылка на слегка тангенциальную атаку с использованием инъекции памяти?

2. Пользовательский ввод не участвует в конкатенации строк, поэтому не могли бы вы объяснить, как это может быть вектором атаки?

3. @MartinSmith отражающая атака памяти занимает пространство памяти и заменяет его другим. Любые строковые литералы уязвимы для этого, и это очень сложно сделать и защитить от. Я не предполагаю, что пользовательский ввод имеет к этому какое-либо отношение. Прочитайте

4. из статьи: «Прежде чем злоумышленник сможет использовать RMI, злоумышленник должен иметь возможность запускать небольшой объем исполняемого кода и должен загрузить или иным образом скопировать байты вредоносной библиотеки DLL в память». и выполнение нескольких конкатенаций строк позволяет злоумышленнику это сделать?

5. Спасибо, эта часть показалась мне слишком сложной. Это все равно, что сказать, что код уязвим, потому что он выполняется на сервере, и злоумышленник может поместить вирус на сервер для выполнения произвольного запроса.