Una de les classes més grans de vulnerabilitats web es coneix com "SQL Injection" o SQLi. El llenguatge de consulta estructurat, també conegut com SQL, és el llenguatge utilitzat per interactuar amb la majoria de bases de dades, tot i que s'utilitzen diverses variants del llenguatge en funció de la plataforma de la base de dades. Qualsevol lloc web que emmagatzemi dades d'usuari, com ara informació del compte, o ofereix funcionalitats de càrrega d'usuari, com ara un lloc web d'allotjament d'imatges, utilitzarà una base de dades per emmagatzemar aquestes dades.
Consell: SQL es pronuncia generalment "ess cue ell" o "seqüela", sent la primera opció més comuna en anglès britànic i la segona més freqüent en anglès americà. Ambdues pronunciacions s'entenen generalment en el context de parlar de bases de dades.
Què és SQLi?
SQLi és una vulnerabilitat on els desenvolupadors web que dissenyen el codi que es comunica entre el servidor web i la base de dades no implementen proteccions contra les ordres SQL enviades per un usuari. El problema és que és possible poder escapar de les declaracions de la base de dades i afegir nous arguments o una declaració completament nova. La declaració de la base de dades modificada o la segona pot dur a terme una sèrie d'accions, com ara supressions o filtracions de dades potencialment a gran escala.
Els exploits solen girar a l'hora de fer que les declaracions existents siguin certes en totes les circumstàncies o de proporcionar una segona ordre per lots que realitza una acció específica, com ara suprimir o mostrar totes les dades. Per exemple, una instrucció SQL per iniciar sessió a un lloc web pot comprovar si el nom d'usuari i la contrasenya enviats coincideixen amb una entrada de la base de dades. Per intentar accedir a un exploit d'injecció SQL, podeu intentar afegir una clàusula "o veritable" com ara "o 1=1". Això faria que l'ordre sigui "inici de sessió amb [aquest] nom d'usuari, si la contrasenya és [això], o aquesta afirmació és certa".
Com prevenir SQLi
SQLi solia ser una manera molt comuna que els llocs web tenien la seva base de dades violada i després filtrada en línia. A causa d'un esforç concertat per garantir que la consciència de seguretat forma part de la formació dels desenvolupadors, aquesta classe de vulnerabilitat s'ha resolt en gran part i només es veu rarament.
El mètode correcte per prevenir SQLi és utilitzar instruccions preparades, també conegudes com a consultes parametritzades. Tradicionalment, les sentències SQL es declaren i tenen l'entrada de l'usuari concatenada durant aquesta declaració. Amb les declaracions preparades, l'ordre de la base de dades s'escriu i després una funció sperate executa l'ordre i insereix les dades de l'usuari. Tot i que això pot semblar una diferència menor, canvia completament la manera com es gestiona l'ordre. La diferència impedeix que s'executi qualsevol ordre SQL significativa i tracta totes les entrades de l'usuari com una cadena, evitant que es produeixi la injecció SQL.