Sådan forhindrer du SQL-injektion

Hvad er SQL Injection (SQLi)?

Alle ved, at med den teknologiske udvikling er sikkerhed den grundlæggende og vigtige funktion for enhver virksomhed og social medieplatform. Næsten hver virksomhed videresender deres forretningsdata, disse data lagres i databaserne. Så SQL tilbyder teknikker til at gemme dine data fra hackere. Vi kan forhindre vores webstedsdata fra hackere ved hjælp af forskellige teknikker. På samme måde er SQL-injektion en hackingteknik. Hackere kan få adgang til dine data, og de kan også crashe dine servere ved at injicere noget kode i dine databaser. Denne metode er gjort mulig på grund af forkert kodning af skrå webpakker. Nogle nye udviklere kontrollerer ikke tomheden af ​​datafelt og tomt felt er årsagen til SQL-injektion.

Forebyg SQL-injektion gennem parametriserede forespørgsler

Denne tilgang består af brugen af ​​forberedte udsagn med spørgsmålstegnet pladsholder (?) i vores forespørgsler, hver gang vi skal indsætte et gebyr fra forbrugeren. Dette er meget effektivt og, medmindre der er en orm inde i JDBC-motorkraftens implementering, immun over for udnyttelser.

Et simpelt eksempelkode for denne teknik er:

offentlig liste safeFindAccountsByCustomerId( String customerId )

kaster Undtagelse {

String sql = ' vælg ' + ' kunde_id, acc_nummer, branch_id, saldo fra konti ' + ' hvor kunde_id = ? ' ;

Forbindelse c = dataSource.getConnection( ) ;

PreparedStatement p = c.prepareStatement( sql ) ;

p.setString(1, kunde-id);

ResultSet rs = p.executeQuery( sql ) );

// udeladt – behandle rækker og returnere en kontoliste

}

I ovenstående kode er prepareStatement()-metoden tilgængelig i Connection-eksemplet for at få et PreparedStatement. Dette giver os mulighed for korrekt at indsætte personleverede værdier i et spørgsmål, før vi udfører det.

Brugen af ​​PDO-forberedte forespørgsler

Brug PDO og forberedte forespørgsler.

($conn er et PDO-objekt)

$stmt = $conn -> forberede (‘INDSÆT I tbl-VÆRDIER (:Id,:navn) ‘);

$stmt -> bindValue ( ' :id ' , $id );

$stmt -> bindValue(':navn ', $navn);

$stmt -> execute( ) ;

Forberedte sætninger er modstandsdygtige over for SQL-injektion, da parameterværdier, som overføres senere, brugen af ​​en enestående protokol, nu ikke behøver at undgås. Hvis den originale erklæringsskabelon ikke er afledt fra ekstern enter, kan der ikke opstå SQL-injektion.

Forebyg gennem Object Relational Mapping (ORM) i Ruby Framework

Mange udviklingsteams vælger at bruge Object Relational Mapping (ORM) frameworks til at gøre oversættelsen af ​​SQL-resultatenheder til kodeobjekter ekstra problemfri. ORM-værktøjer foreslår ofte, at udviklere sjældent burde skrive SQL-sætninger af deres kode - og disse værktøjer bruger gerne parametriserede sætninger under hætten.

def current_user (e-mail)

# 'Bruger'-objektet er et Active Record-objekt, der skal finde metoder

# automatisk genereret af Rails.

User.find_by_email (e-mail)

Ende

Ovenstående kode vil redde dig fra SQL-injektioner eller hackerangreb.

Krypteret database

En anden simpel metode til at forhindre din SQL-database fra injektioner er krypteret database eller data. Så gem normalt dine databaselegitimationsoplysninger i en separat rapport og krypter den sikkert for at sikre, at angriberne ikke kan drage masser af gavn.