Junior — Middle
Kokius užklausų tipus laikote saugiausiais ir kodėl?
sobes.tech AI
Atsakymas iš AI
Pačios saugiausios yra parámetrizuotos (prepared) užklausos ir ORM užklausos, kurios automatiškai išvengia įvesties duomenų apdorojimo.
Priežastis ta, kad jos užkerta kelią SQL injekcijoms — kai piktavalis įterpia kenksmingą SQL kodą per naudotojo įvestį.
Pavyzdys:
-
Paraiškos parametrizuotoje užklausoje, parametrai perduodami atskirai nuo SQL kodo, tai neleidžia keisti užklausos struktūros.
-
Skirtingai nuo stringų sujungimo, kur naudotojo įvestis tiesiogiai įterpiama į užklausą.
Pavyzdžiui, Java su JDBC:
String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();
Šis būdas yra saugesnis nei:
String sql = "SELECT * FROM users WHERE username = '" + userInput + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
Todėl, siekiant užtikrinti saugumą testuojant ir kuriant, rekomenduojama naudoti parametrizuotas užklausas.