Ошибка SQL в ResultSet JDBC - PullRequest
       0

Ошибка SQL в ResultSet JDBC

0 голосов
/ 24 ноября 2011

Я написал следующую часть, которая представляет собой метод Java с двумя аргументами STRING login и pass, представляющими имя пользователя и пароль, для проверки того, находится ли пользователь в таблице базы данных.

Statement stmt = connection.createStatement();

ResultSet rs = statement.executeQuery ("SELECT * FROM users WHERE username = '" 
        + login + "' AND passwd = '" + pass + "'");

Код при тестировании работал правильно.Я читал в книге, что существуют ситуации, когда он потенциально может генерировать ошибку SQL, но в нем точно не упоминаются обстоятельства, при которых приведенный выше код может привести к ошибке SQL.Не могли бы вы кратко объяснить мне эти ситуации?А также, как я могу написать версию кода, которая предотвратит возможность возникновения такой ошибки?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Вы должны написать код, который предотвращает sql инъекцию.Используйте PreparedStatement (Параметризованные операторы) и Stored proc вместо жестко закодированных строк sql.

0 голосов
/ 24 ноября 2011

Первая проблема в том, что этот кусок кода уязвим для SQL Injection. Чтобы заслужить, что вы можете использовать Prepared Statements. Это может быть одной потенциальной угрозой, о которой может говорить книга.

http://www.unixwiz.net/techtips/sql-injection.html

пример использования подготовленного оператора

String query = "SELECT * FROM users WHERE username = ? AND passwd = ?";

PreparedStatement ps = connection.prepareStatement(query);

ps.setString(1, login);
ps.setString(2, passwd);

Resultset rs = rs = ps.executeQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...