De la Seguridad del acceso a datos en aplicaciones ASP ... - Willy .Net
De la Seguridad del acceso a datos en aplicaciones ASP ... - Willy .Net
De la Seguridad del acceso a datos en aplicaciones ASP ... - Willy .Net
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
SELECT au_lname, au_fname FROM authors WHERE au_id = '172-32-xxxx'<br />
Un usuario malint<strong>en</strong>cionado puede escribir el sigui<strong>en</strong>te texto <strong>en</strong> el campo de <strong>en</strong>trada<br />
de <strong>la</strong> aplicación (por ejemplo, un control de cuadro de texto).<br />
' ; INSERT INTO jobs (job_desc, min_lvl, max_lvl) VALUES ('Important Job', 25,<br />
100) -<br />
En este ejemplo, se inserta una s<strong>en</strong>t<strong>en</strong>cia INSERT (pero podría ejecutarse cualquier<br />
instrucción que se permita <strong>en</strong> <strong>la</strong> cu<strong>en</strong>ta utilizada para conectarse a SQL Server). El<br />
código puede ser especialm<strong>en</strong>te dañino si <strong>la</strong> cu<strong>en</strong>ta es miembro de <strong>la</strong> función<br />
sysadmin (permite utilizar comandos <strong>del</strong> Shell mediante xp_cmdshell) y SQL<br />
Server se ejecuta <strong>en</strong> una cu<strong>en</strong>ta de dominio con <strong>acceso</strong> a otros recursos de <strong>la</strong> red.<br />
El comando anterior produce <strong>la</strong> sigui<strong>en</strong>te cad<strong>en</strong>a SQL combinada:<br />
SELECT au_lname, au_fname FROM authors WHERE au_id = '';INSERT INTO jobs<br />
(job_desc, min_lvl, max_lvl) VALUES ('Important Job', 25, 100) --<br />
En este caso, el carácter de comil<strong>la</strong> s<strong>en</strong>cil<strong>la</strong> (') que inicia <strong>la</strong> <strong>en</strong>trada rogue termina el<br />
literal de cad<strong>en</strong>a actual de <strong>la</strong> instrucción SQL. Cierra <strong>la</strong> instrucción actual únicam<strong>en</strong>te<br />
si el sigui<strong>en</strong>te testigo analizado no ti<strong>en</strong>e s<strong>en</strong>tido como continuación de <strong>la</strong> instrucción<br />
actual, pero sí como inicio de una nueva instrucción.<br />
SELECT au_lname, au_fname FROM authors WHERE au_id = ' '<br />
El carácter de punto y coma (;) indica a SQL que se inicia una nueva instrucción, a <strong>la</strong><br />
que sigue el código SQL malint<strong>en</strong>cionado:<br />
; INSERT INTO jobs (job_desc, min_lvl, max_lvl) VALUES ('Important Job', 25,<br />
100)<br />
Nota: No es obligatorio utilizar el punto y coma para separar instrucciones SQL.<br />
<strong>De</strong>p<strong>en</strong>de de <strong>la</strong> implem<strong>en</strong>tación o el proveedor, pero no es necesario <strong>en</strong> SQL<br />
Server. Por ejemplo, SQL Server analizará el código sigui<strong>en</strong>te como dos<br />
instrucciones indep<strong>en</strong>di<strong>en</strong>tes:<br />
SELECT * FROM MyTable DELETE FROM MyTable<br />
Por último, <strong>la</strong> secu<strong>en</strong>cia de caracteres de guión doble (--) es un com<strong>en</strong>tario SQL<br />
que indica a SQL que omita el resto <strong>del</strong> texto; <strong>en</strong> este caso, se omite el carácter de<br />
comil<strong>la</strong> s<strong>en</strong>cil<strong>la</strong> de cierre ('), que de otra forma provocaría un error de análisis de<br />
SQL.<br />
El texto completo que ejecuta SQL como resultado de <strong>la</strong> instrucción anterior es el<br />
sigui<strong>en</strong>te:<br />
SELECT au_lname, au_fname FROM authors WHERE au_id = '' ; INSERT INTO jobs<br />
(job_desc, min_lvl, max_lvl) VALUES ('Important Job', 25, 100) --'