Lib для защиты инъекций SQL / javascript для java / jsp

Кто-нибудь знает хорошую библиотеку, в которой я могу запускать строки до их вставки, которая может вырезать код sql / javascript? Для запуска на страницах jsp.

В идеале библиотека будет:

  • Бесплатно
  • Легкий
  • Легко использовать

Заранее спасибо сообществу SO, которое с радостью ответит :)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
4 916
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вам нужно полагаться на механизм API вашей базы данных для использования параметризованных запросов. Если вы первый динамически создаете строку sql, а тогда хочет очистить завершенную строку запроса, вы делаете это неправильно. Это просто напрашивается на неприятности.


Обновлено: перечитав ваш вопрос, кажется, я неправильно понял, о чем вы спрашивали. Я поддерживаю свои первоначальные комментарии как точные для части вашего вопроса о sql-инъекции. Для этого вам обязательно нужны реальные параметры запроса.

Что касается фильтрации javascript, я не думаю, что есть реальный способ стандарт сделать это. Я знаю, что Джефф разместил код, который они используют здесь, в SO, но у меня нет удобной ссылки. Если найду, выложу.

Ответ принят как подходящий

Apache Commons lang StringEscapeUtils поможет вам в этом. Ускользает, не раздевается.

http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html

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

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

Хорошо, я думаю, мне нужно перезапустить изменение кода :) все еще вопрос для api все еще стоит :)

Взгляните на AntiSamy на OWASP. Я думаю, это может быть то, что вы ищете. В настоящее время я не работаю на Java, поэтому не могу рассказать вам о том, как она работает.

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

Чтобы предотвратить внедрение SQL, используйте объекты PreparedStatement. Если вы используете какой-либо уровень сохраняемости, убедитесь, что он использует объекты PreparedStatement. Что касается вредоносного HTML и JavaScript, используйте. По умолчанию это экранирует символы XML. Вы также можете использовать JSTL-функцию escapeXml из файла fn tld.

Просто перефразируя предложения, данные здесь другими:

OP хочет предотвратить атаки с использованием SQL и JavaScript.

Атаки с использованием SQL-инъекций можно предотвратить, обеспечив использование параметризованных запросов / переменных связывания для предоставления пользовательского ввода в базу данных. В мире Java использование PMDПравило PMD) и Findbugs (правила встроены в Findbugs по умолчанию) поможет вам определить места в вашей базе кода, которые уязвимы для атак с использованием SQL-инъекций. У OWASP есть хорошая статья о предотвращение SQL-инъекций в Java.

Что касается внедрения сценария, то самый безопасный способ предотвратить выполнение сценария, внедренного злоумышленником, - это обеспечить отображение пользовательского ввода, когда он используется в качестве вывода, в закодированном формате - для веб-приложений это будет Кодировка HTML. Эта страница OWASP показывает, как выполнять кодирование HTML в Java.

Если вы хотите защитить свое приложение от инъекции javascript, вам нужно использовать инструмент или метод перехвата, который принимает ваш javascript в качестве аргумента. В случае mongodb метод eval () может выполнять javascript на сервере mongo. Вы можете перейти по ссылке ниже, чтобы смягчить атаку ssjs. https://www.sciencedirect.com/science/article/pii/S1568494619305022

Другие вопросы по теме