Разрешение указания имени столбца делает его потенциальным риском внедрения SQL

1

У меня есть два метода, когда мне сказали, что "тот факт, что вы разрешаете указать имя столбца, - это (риск SQL-инъекции)". Что это значит? Укажите, кем? И как я могу это исправить?

public void tableChanged(TableModelEvent e) {
    int row = e.getFirstRow();
    int col = e.getColumn();
    model = (MyTableModel) e.getSource();
    String stulpPav = model.getColumnName(col);
    Object data = model.getValueAt(row, col);
    Object studId = model.getValueAt(row, 0);
    System.out.println("tableChanded works");
    try {
        new ImportData(stulpPav, data, studId);
        bottomLabel.setText(textForLabel());
    } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
    } catch (SQLException e1) {
        e1.printStackTrace();
    }
}

public class ImportData {    

    public ImportData(String a, Object b, Object c)
            throws ClassNotFoundException, SQLException {
        PreparedStatement prepStmt = null;
        try {
            connection = TableWithBottomLine.getConnection();
            String stulpPav = a;
            String duom = b.toString();
            String studId = c.toString();
            System.out.println(duom);

            String updateString = "update finance.fin " + "set ? = ? " + "where ID = ? "+ ";";
            prepStmt = connection.prepareStatement(updateString);
            prepStmt.setString(1, stulpPav);
            prepStmt.setString(2, duom);
            prepStmt.setString(3, studId);              

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (prepStmt != null)
                prepStmt.close();
            System.out.println("Data was imported to database");
        }  
    }   
}
  • 2
    SQL-инъекция - это способ, с помощью которого хакеры / люди с вредоносным намерением могут использовать ваш код для внедрения своего кода: en.wikipedia.org/wiki/SQL_injection. Многое в Интернете о SQL-инъекциях.
  • 0
    вышеприведенный код не представляет риска внедрения SQL-кода, на самом деле, нет риска того, что он произведет приемлемый SQL-код любого типа. update finance.fin set ? = ? where ID = ? ; это просто не сработает.
Теги:
swing
jtable
tablemodel

1 ответ

1

Что это значит? :)

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

Укажите, кем?

Любой код, который может получить доступ к имени столбца, это только проблема, если пользователь имеет доступ к этому полю.

И как я могу это исправить?

Убедитесь, что пользователь не может указать это имя столбца и игнорировать сообщение

  • 0
    «Убедитесь, что пользователь действительно не может указать имя этого столбца». Вероятнее всего, именно с помощью идентификаторов доступа это может стать проблемой?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню