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.
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.
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.
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.
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.