sql >> Database teknologi >  >> RDS >> Mysql

hvor sikre er BOB udarbejdede erklæringer

Strengt taget er der faktisk ikke behov for at undslippe, fordi parameterværdien aldrig interpoleres i forespørgselsstrengen.

Måden forespørgselsparametre fungerer på er, at forespørgslen sendes til databaseserveren, når du kaldte prepare() , og parameterværdier sendes senere, når du kaldte execute() . Så de holdes adskilt fra forespørgslens tekstform. Der er aldrig en mulighed for SQL-injektion (forudsat PDO::ATTR_EMULATE_PREPARES er falsk).

Så ja, forespørgselsparametre hjælper dig med at undgå denne form for sikkerhedssårbarhed.

Er de 100 % bevis mod enhver sikkerhedssårbarhed? Nej selvfølgelig ikke. Som du måske ved, træder en forespørgselsparameter kun i stedet for en enkelt bogstavelig værdi i et SQL-udtryk. Du kan ikke få en enkelt parameter til at erstatte en liste med værdier, for eksempel:

SELECT * FROM blog WHERE userid IN ( ? );

Du kan ikke bruge en parameter til at gøre tabelnavne eller kolonnenavne dynamiske:

SELECT * FROM blog ORDER BY ?;

Du kan ikke bruge en parameter til nogen anden type SQL-syntaks:

SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

Så der er en del tilfælde, hvor du skal manipulere forespørgslen som en streng, før prepare() opkald. I disse tilfælde skal du stadig skrive kode omhyggeligt for at undgå SQL-injektion.



  1. MySQL i skyen - Online migration fra Amazon RDS til din egen server:Del 2

  2. ASIN() Eksempler i SQL Server

  3. Sådan kører du fjernjob fra IRI Workbench

  4. MySQL fjerner nogle fremmednøgler