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.

Solución<br />

Se pued<strong>en</strong> utilizar <strong>la</strong>s sigui<strong>en</strong>tes opciones para l<strong>la</strong>mar a SQL de forma segura desde<br />

<strong>la</strong> aplicación.<br />

Utilice <strong>la</strong> colección Parameters al crear <strong>la</strong>s instrucciones SQL.<br />

SqlDataAdapter myCommand = new SqlDataAdapter(<br />

"SELECT au_lname, au_fname FROM Authors WHERE au_id= @au_id",<br />

myConnection);<br />

SqlParameter parm = myCommand.SelectCommand.Parameters.Add(<br />

parm.Value= Login.Text;<br />

"@au_id",<br />

SqlDbType.VarChar, 11);<br />

Utilice <strong>la</strong> colección Parameters cuando l<strong>la</strong>me a un procedimi<strong>en</strong>to almac<strong>en</strong>ado.<br />

// AuthorLogin is a stored procedure that accepts a parameter named Login<br />

SqlDataAdapter myCommand = new SqlDataAdapter("AuthorLogin", myConnection);<br />

myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;<br />

SqlParameter parm = myCommand.SelectCommand.Parameters.Add(<br />

parm.Value=Login.Text;<br />

"@LoginId", SqlDbType.VarChar,11);<br />

Si utiliza <strong>la</strong> colección Parameters, sea cual sea <strong>la</strong> <strong>en</strong>trada de un usuario<br />

malint<strong>en</strong>cionado, dicha <strong>en</strong>trada se tratará como un literal. Otra v<strong>en</strong>taja <strong>del</strong> uso<br />

de <strong>la</strong> colección Parameters es que puede exigir comprobaciones de tipo y<br />

longitud. Los valores fuera <strong>del</strong> rango des<strong>en</strong>cad<strong>en</strong>an una excepción. Esto es un<br />

c<strong>la</strong>ro ejemplo de def<strong>en</strong>sa <strong>en</strong> profundidad.<br />

Filtre <strong>la</strong> <strong>en</strong>trada <strong>del</strong> usuario de caracteres SQL. El sigui<strong>en</strong>te método muestra<br />

cómo garantizar <strong>la</strong> seguridad de cualquier literal de cad<strong>en</strong>a que se utilice <strong>en</strong><br />

una instrucción de comparación SQL s<strong>en</strong>cil<strong>la</strong> (igual a, m<strong>en</strong>or que, mayor que).<br />

Lo hace asegurándose de que cualquier apóstrofo que se utilice <strong>en</strong> <strong>la</strong> cad<strong>en</strong>a<br />

se interpreta correctam<strong>en</strong>te mediante un apóstrofo adicional. En un literal de<br />

cad<strong>en</strong>a SQL dos apóstrofos consecutivos se tratan como una instancia <strong>del</strong><br />

carácter de apóstrofo <strong>en</strong> <strong>la</strong> cad<strong>en</strong>a y no como <strong>del</strong>imitadores.<br />

private string SafeSqlLiteral(string inputSQL)<br />

{<br />

}<br />

…<br />

return inputSQL.Rep<strong>la</strong>ce("'", "''");<br />

string safeSQL = SafeSqlLiteral(Login.Text);<br />

SqlDataAdapter myCommand = new SqlDataAdapter(<br />

"SELECT au_lname, au_fname FROM authors WHERE au_id = '" +<br />

safeSQL + "'", myConnection);<br />

Otras prácticas recom<strong>en</strong>dadas<br />

A continuación se describ<strong>en</strong> algunas medidas adicionales que pued<strong>en</strong> tomarse para<br />

limitar <strong>la</strong> capacidad de aprovecharse de los puntos débiles y para limitar el alcance<br />

de los posibles daños:<br />

Evite <strong>la</strong> <strong>en</strong>trada no válida <strong>en</strong> <strong>la</strong> puerta (<strong>la</strong> aplicación cli<strong>en</strong>te) limitando el<br />

tamaño y el tipo de <strong>en</strong>trada. Al limitar el tamaño y el tipo de <strong>en</strong>trada se<br />

reduc<strong>en</strong> considerablem<strong>en</strong>te los daños posibles. Por ejemplo, si el campo de

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

Saved successfully!

Ooh no, something went wrong!