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.