sql >> Database teknologi >  >> RDS >> Oracle

Forhindrer oci_bind_by_name SQL-injektion sikkert?

Brug af bundne parametre er tilstrækkeligt i almindelige tilfælde, og god praksis for at undgå SQL-injektion.

Men en parameter i en forberedt sætning kan kun bruges til en værdi i et SQL-udtryk. Med andre ord, hvor du normalt ville skrive en citeret streng literal, citeret dato literal eller en numerisk literal. Og én parameter ==én værdi (ingen lister).

Du bør bruge bundne parametre til disse tilfælde. Hvis du stiller dette spørgsmål, fordi du tror, ​​du måske vil springe over at bruge bundne parametre, hvis nogen svarer, at de ikke er tilstrækkelige, så undskyld, du vil ikke blive fritaget for sikker programmeringspraksis.

Der er dog andre (måske mindre almindelige) tilfælde, hvor bundne parametre ikke virker. Hvis du skal skrive en forespørgsel med et dynamisk tabelnavn, kolonnenavn eller anden identifikator, eller et helt udtryk eller et SQL-nøgleord, så har du brug for en anden metode. Disse tilfælde skal rettes i SQL-syntaksen ved forbered tid, så de kan ikke parametreres.

For eksempel er her en forespørgsel med dynamiske dele angivet ved brug af variabler, som ikke kan være parametre:

$sql = "SELECT * FROM mytable ORDER BY $column_of_users_choice $asc_or_desc";

Du bør bruge hvidliste til disse sager . Med andre ord, sørg for, at en streng, du interpolerer i din forespørgsel som et dynamisk tabelnavn, faktisk er en af ​​de tabeller, der findes i din database. Sørg for, at SQL-nøgleord er legitime søgeord.

Aldrig tag brugerinput ordret og interpoler det til SQL (eller en hvilken som helst anden kode, der parses under kørsel, f.eks. det argument, du feeder til eval() eller shellexec() ). Og det er ikke kun brugerinput, der kan være usikkert indhold.

Se også min præsentation SQL Injection Myths and Falacies for mere forklaring.




  1. oledb forbindelse undtagelse

  2. hvordan opretter man login-side i Android-appen?

  3. php mysqli_connect:godkendelsesmetode ukendt for klienten [caching_sha2_password]

  4. SQL Server 2008- Få tabelbegrænsninger