Изменение кода для предотвращения SQL-инъекций - PullRequest
1 голос
/ 24 июня 2011

Пример SQL-инъекции

Следующий код Java-сервлета, используемый для выполнения функции входа в систему, иллюстрирует уязвимость, принимая пользовательский ввод без выполнения адекватной проверки ввода или экранирования метасимволов:

String sql = "select * from user where username='" + username +"' and password='" + password + "'";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
loggedIn = true;
    out.println("Successfully logged in");
} else {
    out.println("Username and/or password not recognized");
}

================

Теперь скажите, пожалуйста, как мы можем изменить этот код, чтобы он не содержал SQL-инъекций

Ответы [ 4 ]

5 голосов
/ 24 июня 2011

Вам необходимо использовать класс PreparedStatement и добавить параметры.

См. Документацию.

2 голосов
/ 24 июня 2011

Используйте подготовленный оператор вместо построения собственной строки запроса: http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

2 голосов
/ 24 июня 2011

Вы делаете это, убирая username и password, чтобы они не содержали опасных символов, либо избегая их, либо удаляя их.

Это может объяснитьпроблема лучше.

0 голосов
/ 02 сентября 2014

Если вы предоставляете значения во время выполнения для конкретного SQL-запроса, вам следует использовать подготовленное состояние,

вместе с вами лучше использовать тег формы (например, на странице просмотра: index.html, login)jsp и т. д.) метод POST вместо GET для преодоления SQL-инъекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...