How should I sanitize database input in Java?

前端 未结 5 2168
我在风中等你
我在风中等你 2020-12-31 07:10

Could someone please point me to a good beginner guide on safely running SQL queries formed partly from user input? I\'m using Java, but a language neutral guide is fine to

5条回答
  •  清歌不尽
    2020-12-31 07:29

    PreparedStatement? Yes, absolutely. But I think there's one more step: validation of input from UI and binding to objects prior to getting close to the database.

    I can see where binding a String in PreparedStatement might still leave you vulnerable to a SQL injection attack:

    String userInput = "Bob; DELETE FROM FOO";
    String query = "SELECT * FROM FOO WHERE NAME = ?";
    
    PreparedStatement ps = connection.prepareStatement(query);
    ps.setString(1, userInput);
    ps.executeQuery();
    

    I've gotta admit that I haven't tried it myself, but if this is remotely possible I'd say PreparedStatement is necessary but not sufficient. Validating and binding on the server side is key.

    I'd recommend doing it with Spring's binding API.

提交回复
热议问题