Sobes.tech
Junior — Middle

Jakie typy zapytań uważasz za najbezpieczniejsze i dlaczego?

sobes.tech AI

Odpowiedź od AI

Najbezpieczniejsze są zapytania parametryzowane (prepared) i zapytania ORM, które automatycznie eskapują dane wejściowe.

Powód jest taki, że zapobiegają one wstrzykiwaniu SQL — gdy atakujący wprowadza złośliwy kod SQL przez dane wejściowe użytkownika.

Przykład:

  • W zapytaniu parametryzowanym parametry są przekazywane oddzielnie od kodu SQL, co wyklucza możliwość zmiany struktury zapytania.

  • W przeciwieństwie do konkatenacji łańcuchów, gdzie dane wejściowe użytkownika są bezpośrednio wstawiane do zapytania.

Na przykład w Java z JDBC:

String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();

Taka metoda jest bezpieczniejsza niż:

String sql = "SELECT * FROM users WHERE username = '" + userInput + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);

Dlatego dla bezpieczeństwa podczas testów i rozwoju zaleca się używanie zapytań parametryzowanych.