28.11.2012 Views

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

SHOW MORE
SHOW LESS

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) --'

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!