Классическое внедрение SQL ASP

Ответ на предыдущий комментарий в @me здесь из-за моей репутации:

Vlookward, не запись методов get/методов set не имеет никакого смысла вообще. Единственные опции для установки частных полей состоят в том, чтобы иметь явные методы set, чтобы установить их в Вашем конструкторе или установить косвенно с помощью других методов (функционально задерживающий метод set к другому месту). Почему бы не использовать методы set?

ну, иногда, нет никакой потребности к полю быть частной (Извините, если мой английский язык не очень хорош). Часто, мы пишем наше программное обеспечение, поскольку это была библиотека, и мы инкапсулируем наши поля (наши поля бизнес-логики) с ненужными методами get/методами set.

Другие времена, что методы на самом деле необходимы. Затем существует две возможности:
1. Существует бизнес-логика в них. Тогда они должны быть протестированы, но они не настоящие методы get/методы set. Я всегда пишу что логика в других классах. И тестовый тест, что другие классы, не POJO.
2. Нет. Затем не пишите им вручную, если Вы можете. Например, реализация для следующего интерфейса может быть полностью автоматически сгенерирована (и также во времени выполнения!):

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

Так тестируют только, что записано вручную. Неважно, если это - метод get/метод set.

8
задан casperOne 19 November 2011 в 02:40
поделиться

5 ответов

Эта ссылка должна оказаться полезной.

Классическая защита от инъекций ASP SQL

6
ответ дан 5 December 2019 в 12:59
поделиться

No, if you build a SQL string with values that you get directly from "outside", then a "prepared statement" will not help you.

a

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"

is still asking for trouble. The only way to solve this is by using parameters in your query.

6
ответ дан 5 December 2019 в 12:59
поделиться

Я бы посоветовал вам написать функцию для очистки пользовательского ввода, а затем запустить через нее все переменные запроса. Когда я писал свой, я делал такие вещи, как:

  • экранировать одинарные кавычки,
  • удалить; и другие специальные символы и
  • убедитесь, что вы не можете - (закомментировать) конец оператора.

В большинстве случаев SQL-инъекция пытается сделать что-то вроде 'или 1 = 1 или a =' поэтому код SQL будет выглядеть так:

SELECT * from mytable where mycolumn = '' or 1=1 or a=''

Так что избавление от одинарных кавычек - это действительно серьезная проблема, о которой вам нужно беспокоиться.

-1
ответ дан 5 December 2019 в 12:59
поделиться

Вы также можете посмотреть классический проект asp с открытым исходным кодом под названием «Owasp stinger». Это помогает не только с внедрением Sql, но и с внедрением заголовков и множеством других проблем безопасности, общих для всех веб-приложений.

http://www.owasp.org/index.php/Classic_ASP_Security_Project

2
ответ дан 5 December 2019 в 12:59
поделиться

Вот еще одна хорошая ссылка и пример.

http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx

Раньше мы просто создавали пару функций для работы с любыми внешними входными данными для SQL-инъекций и XSS. Затем медленно мы преобразовывали все встроенные SQL в хранимые процедуры.

0
ответ дан 5 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: