Подтвердить что ты не робот

Способы предотвращения атаки SQL Injection и XSS в веб-приложении Java

Я пишу класс java, который будет вызван фильтром сервлета, и который проверяет попытки инъекционной атаки и XSS для веб-приложения java на основе Struts. Класс InjectionAttackChecker использует regex и java.util.regex.Pattern класс для проверки ввода с шаблонами, указанными в regex.

С учетом сказанного у меня есть следующие вопросы:

  • Все специальные символы и шаблоны символов (например, < > ,., -, < =, ==, > =) должны быть заблокированы, чтобы можно было предотвратить атаку инъекции.
  • Есть ли существующий шаблон регулярного выражения, который я мог бы использовать как?
  • Я должен разрешить некоторые специальные шаблоны символов в некоторых конкретных случаях, некоторые примерные значения (должны быть разрешены): (используется "pipe" | символ как разделитель разных значений) * Atlanta | # 654, BLDG 8 # 501 | Герпес симплекс: хроническая язва ( > 1 мес.) Или бронхит, пневмонит или эзофагит | FUNC и COMP (date_cmp), "NDI и MALKP и HARS_IN (icd10, yes)". Какую стратегию следует принять, чтобы можно было предотвратить инъекцию и XSS, но все же разрешить эти шаблоны символов.

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

4b9b3361

Ответ 1

Исходя из ваших вопросов, я предполагаю, что вы пытаетесь фильтровать плохие значения. Я лично считаю, что этот метод может быть очень сложным очень быстро и будет рекомендовать значения кодировки в качестве альтернативного метода. Вот статья IBM по этому вопросу, в которой излагаются плюсы и минусы обоих методов, http://www.ibm.com/developerworks/tivoli/library/s-csscript/.

Чтобы избежать атак SQL-инъекций, просто используйте подготовленные инструкции вместо создания строк SQL.

Ответ 2

Если вы попытаетесь дезинформировать все данные на входе, у вас будет очень трудное время. Существует множество трюков с кодировкой символов, которые позволят людям обойти ваши фильтры. Этот впечатляющий список - это лишь некоторые из множества вещей, которые можно сделать как инъекции SQL. Вы также должны предотвратить инъекцию HTML, инъекцию JS и, возможно, другие. Единственный верный способ сделать это - кодировать данные, в которых он используется в вашем приложении. Кодируйте весь вывод, который вы пишете на свой веб-сайт, кодируйте все ваши параметры SQL. Будьте особенно осторожны с последним, поскольку нормальное кодирование не будет работать для нестрочных параметров SQL, как описано в этой ссылке. Использовать параметризованные запросы для обеспечения полной безопасности. Также обратите внимание, что теоретически вы можете кодировать свои данные во время ввода пользователя и хранить его в базе данных, но это работает только в том случае, если вы всегда будете использовать данные способами, использующими этот тип кодирования (например, HTML если он будет использоваться только с HTML, если он используется в SQL, вы не будете защищены). Частично это объясняется тем, что эмпирическое правило никогда не хранит закодированные данные в базе данных и всегда кодируется при использовании.

Ответ 3

Проверка и привязка всех данных является обязательной. Выполните проверку на стороне клиента и на стороне сервера, поскольку 10% пользователей отключили JavaScript в своих браузерах.

Jeff Atwood имеет приятный блог о теме, которая дает вам вкус для своей сложности.

Ответ 4

Здесь довольно обширная статья по этому вопросу.

Я не думаю, что у вас будет святой Грааль. Я также предлагаю попробовать кодировать/декодировать полученный текст несколькими стандартными способами (uuencode, base64)

Ответ 5

не фильтровать или блокировать значения.

  • вы должны убедиться, что при объединении битов текста вы делаете правильные преобразования типов:), то есть: если у вас есть кусок строки, которая является типом HTML и строкой типа TEXT, вы должны преобразовать TEXT в HTML вместо того, чтобы вслепую конкатенацию их. в haskell вы можете легко обеспечить это с помощью системы типов.

Хорошие языки шаблонов html будут удалены по умолчанию. если вы генерируете XML/HTML, то иногда лучше использовать инструменты DOM, чем язык шаблонов. если вы используете инструмент DOM, он устраняет многие из этих проблем. К сожалению, инструмент DOM обычно дерьмо по сравнению с шаблонами:)

  1. Если вы берете строки типа HTML от пользователей, вы должны дезинформировать его с помощью библиотеки, чтобы удалить все нехорошие метки/атрибуты. есть много хороших фильтров html whitelist.
  2. вы всегда должны использовать параметризованные запросы. ВСЕГДА! если вам нужно динамически создавать запросы, а затем динамически создавать их с помощью параметров. никогда не объединять нестандартные строки SQL с строками SQL.

Ответ 6

Взгляните на проект AntiSamy [www.owasp.org]. Я думаю, это именно то, что вы хотите; вы можете настроить фильтр для блокировки определенных тегов. Они также предоставляют шаблоны политик, политика slashdot будет хорошим началом, а затем добавьте теги, которые вам нужны.

Кроме того, на веб-сайте www.osasp.org имеется множество знаний о защите вашего приложения.

То, что пользователь "nemo" говорит об использовании подготовленных операторов и кодирования, также должен быть выполнен.