powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + PostgreSQL: sql injection protection
12 сообщений из 12, страница 1 из 1
Java + PostgreSQL: sql injection protection
    #33794415
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Есть запрос вида:

query.append("select id");
query.append("from users");
query.append("where login='"+login+"' and password='"+password+"'");

login/password приходят от юзера, юзер считается авторизованным если запрос вернул хотя бы одну запись.

Вопрос в следующем, является ли экранирование символа ' 100% защитой от иньекции?

Т.е. модифицированный защищеный код будет выглядить слещующим образом:
query.append("select id");
query.append("from users");
query.append("where login='"+login.replaceAll("'","\\\\'")+"' and password='"+password.replaceAll("'","\\\\'")+"'");

Такое экранирвование делает невозожным OR иньекцию простейшего вида:
login="1"
password="' or 'a'='a"

Существуют ли другие варианты? Есть идея использовать фукнцию chr() которая по коду символа возвращает сам символ, или не получится?
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33794426
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл сказать, запрос уходит в PosgtreSQL через JDBC драйвер
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33794450
Tapac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooluserВсем привет!

Есть запрос вида:

query.append("select id");
query.append("from users");
query.append("where login='"+login+"' and password='"+password+"'");



Потенциальная уязвимость -- не единственная проблема такого запроса.
Вряд ли PostgreSQL будет кэшировать такой запроси и его план.

используй что-то типа
SELECT id FROM users WHERE login=:1 AND password=:2
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33794498
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, это понятно

Вопрос в другом, как эту потенциальную уязвимость сделать реальной?
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33794537
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечаю сам себе, запрос уязвим, поскольку для:

login="\\"
password=" or 1=1 ; -- "

условие в where становится истинным...
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33794571
Tapac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooluserЛадно, это понятно

Вопрос в другом, как эту потенциальную уязвимость сделать реальной?

применяй параметризированные запросы и забудь про уязвимости к sql-инъекциям.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
PreparedStatement pstmt =
  conn.preparedStatement( "select id from users login=:1 and password=:2");

pstmt.setString( 1 ,  new  String("пользователь"));
pstmt.setString( 2 ,  new  String("пароль"));

ResultSet rs = pstmt.executeQuery();
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33798532
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете подсказать алгоритм, по которому работает параметризированный запрос.
Я так понимаю, что:

1. Java отправляет в БД параметризированный запрос, БД строит план запроса и возвращает приложению некоторый идентификатор этого запроса
2. Приложение формирует набор значений параметров и подставляет их в запрос данным идентификатором
3. Приложение дает команду выполнить запрос

Я прав?

Тогда вопрос, что, Джава или БД, в данном случае гарантирует экранирование спец. символов?
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33798574
Tapac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooluser
Тогда вопрос, что, Джава или БД, в данном случае гарантирует экранирование спец. символов?

В случае Oracle -- БД, как я понимаю.

http://injection.rulezz.ru
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33799179
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в случае постгрес?
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33799343
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tapac cooluser
Тогда вопрос, что, Джава или БД, в данном случае гарантирует экранирование спец. символов?

В случае Oracle -- БД, как я понимаю.

http://injection.rulezz.ru
тынц
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33823148
cooluser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял setEscapeProsessing() имеет смысл только для "обычного" Statement (не для PreperadStatement), поскольку экранируются вся строка запроса.

Поэтому вопрос с тем, кто и как занимается экранированием параметров при использовании PreparedStatement остается открытым :)
...
Рейтинг: 0 / 0
Java + PostgreSQL: sql injection protection
    #33824301
Tapac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cooluser
Поэтому вопрос с тем, кто и как занимается экранированием параметров при использовании PreparedStatement остается открытым :)

СУБД -- в этом легко убедиться..
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java + PostgreSQL: sql injection protection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]