Lib для защиты SQL / JavaScript-инъекций для Java / JSP - PullRequest
2 голосов
/ 08 декабря 2008

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

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

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

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

Ответы [ 7 ]

5 голосов
/ 08 декабря 2008

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

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

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

4 голосов
/ 08 декабря 2008

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


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

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

2 голосов
/ 08 декабря 2008

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

0 голосов
/ 13 декабря 2008

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

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

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

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

0 голосов
/ 08 декабря 2008

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

0 голосов
/ 08 декабря 2008

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

0 голосов
/ 08 декабря 2008

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

Ладно, я думаю, мне нужно перезапустить изменение кода :). Вопрос о API все еще стоит :)

...