Wstrzykiwanie SQL ( SQLi )

Mar 12 2023
Witam. Dziękujemy za poświęcenie czasu na przeczytanie tego listu — do góry! Doceniam to! Dzisiejszy materiał będzie dotyczył zrozumienia „SQL Injection”. Treść jest całkowicie oparta na moich osobistych doświadczeniach i wiedzy, interakcjach z niesamowitymi ludźmi z przestrzeni App Sec i Software Development oraz wielu lekturach i bezpiecznym kodowaniu. W tym artykule postaram się uprościć zawartość w podstawach.
Uczmy się razem | Wstrzyknięcie SQL

Witam,

Dziękujemy za poświęcenie czasu na przeczytanie tego listu — up! Doceniam to!

Dzisiejsze treści będą poświęcone zrozumieniu „SQL Injection”

Treść jest całkowicie oparta na moich osobistych doświadczeniach i wiedzy, interakcjach z niesamowitymi ludźmi z przestrzeni App Sec i Software Development oraz wielu lekturach i bezpiecznym kodowaniu.

W tym artykule postaram się uprościć zawartość w podstawach. Jestem pewien, że czytelnicy będą mieli własne przemyślenia i komentarze, i chętnie przyjmę wszelkie opinie i dyskusje.

Poglądy / Komentarze / Opinie są moimi własnymi, a nie mojego byłego/obecnego pracodawcy.

Uczmy się razem!

Co to jest wstrzykiwanie SQL?

Rodzaj ataku na zabezpieczenia aplikacji, w którym złośliwy aktor wstawia złośliwy kod SQL do podatnego na ataki pola wejściowego w celu uzyskania dostępu do danych w bazie danych i manipulowania nimi. SQLi pozwala atakującemu przeglądać / modyfikować / usuwać dane w bazie danych.

Jak naprawić SQLi?

Nie łącz zapytań SQL i wartości wejściowych.

Zawsze przeprowadzaj sprawdzanie poprawności danych wejściowych ( moja osobista opinia, w rzeczywistości odstrasza wiele złośliwych podpisów ), a następnie postępuj zgodnie z jedną z poniższych strategii, aby naprawić SQLi -

  1. Sparametryzowane zapytania: przekaż wartości wejściowe jako parametry do instrukcji sql. Osiąga się to za pomocą zapytań parametrycznych. Zapobiega to wykonywaniu złośliwych danych wejściowych jako kodu SQL.
  2. Procedury przechowywane: Znacznie lepiej jest nie mieć zapytań SQL sql w kodzie i przenosić je do bazy danych za pomocą procedur przechowywanych.

Sparametryzowane zapytania:

W poniższym przykładzie kodu nazwa i hasło są przekazywane jako parametry do instrukcji sql za pośrednictwem funkcji „setString()”. Jest to metoda PreparedStatement.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

W poniższym przykładzie kodu „nazwa” i „lokalizacja” są przekazywane jako parametry do procedury składowanej „userDetails” za pośrednictwem „setString()”. Jest to metoda CallableStatement. Dane wyjściowe są odbierane za pomocą parametru „output”, który wykorzystuje „registerOutParameter”. Jest to kolejna metoda CallableStatement.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

Komentarze / opinie są zawsze mile widziane, ponieważ zawsze staram się ulepszać zawartość i być w tym lepszy.

Artykuł źródłowy: Moje własne doświadczenie w App Sec, parafrazując treści z wielu witryn internetowych, narzędzi Open AI, DALL-E, Developer i NLP.

Dziękuję!

Dodaj mnie na LinkedIn