2. INTRODUCCIÓN A LA
SEGURIDAD
Información almacenada en la base de datos
debe estar protegida contra accesos no
autorizados, la destrucción o alteración de datos
con fines indebidos y contra la introducción
accidental de inconsistencia.
4. VIOLACIONES DE LA SEGURIDAD
E INTEGRIDAD
La pérdida de
consistencia se
debe:
Anomalías en la Error lógico que
Caídas de Anomalías a la
distribución viola
transacciones base de datos
computadores transacciones
Para respeta
protecciones de
base de datos
Es más fácil prevenir la pérdida de consistencia de datos que
prevenir el acceso mal intencionado a la base de datos
5. Formas de acceso indebido
Lectura de datos sin autorización
(robo de información).
Modificación de datos sin
autorización.
Destrucción no autorizada de los
datos
6. Niveles de seguridad para una base de datos:
Físico
El lugar donde se encuentran los sistemas debe estar
protegido
Humano
Debe tener cuidado al conceder autorizaciones
Sistema operativo
Seguridad contra ataques exteriores
Sistemas de bases de datos
Garantizar que no se violen las restricciones de
autorización
7.
8. ¿Que son las inyecciones de código
SQL?
Es un método de infiltración de código intruso
que se vale de una vulnerabilidad informática
presente en una aplicación en el nivel de
validación de las entradas para realizar consultas
a una base de datos.
Consiste en la modificación de las consultas a
nuestra base de datos a partir de los parámetros
pasados por URL al script en PHP.
9. ¿Dónde se origina este
problema?
Por el incorrecto chequeo o filtrado
de las variables.
10. ¿Como saber si tu sitio puede ser
hackeado con SQL Injection?
Simplemente agregale "/*" o una simple tilde, si te tira
un error, tu sitio es vulnerable.
Vamos a poner un ejemplo:
Tu sitio es "http://www.tupagina.com/index.php?id=1"
Lo comprobamos de la siguiente manera:
"http://www.tupagina.com/index.php?id=1/*"
o tambien asi:
"http://www.tupagina.com/index.php?id=1'"
como tambien de esta manera:
"http://www.tupagina.com/index.php?id=1)"
Si al colocar cualquiera de estas opciones da un
error, tu sitio es vulnerable, por el contrario si tu sitio
sigue mostrandose igual, tanto tu SQL como tu
plantilla php estan correctamente configurados.
11. ¿Como realiza un hacker la
inyección?
Simplemente verifica que el sitio sea vulnerable
con las tecnicas que mencioné anteriormente, si
lo es comienza el proceso de prueba.
tu sitio es :
"http://www.tupagina.com/index.php?id=1" asi
que se comienza con el chequeo de tablas asi "-1
order by 1" hasta dar con el error "-1 order by 16"
una vez alli ya sabemos que las tablas son
menos de 16 mostrando el siguiente error
"Unknown column '17' in 'order clause".
12. ¿En que consiste?
Validar el acceso de un usuario registrado utilizando
SQL:
$sql = "SELECT * FROM usr WHERE id = '" . $id ;
$sql .= "' AND pwd = '" . $pwd . "'" ;
Cuando se tienen valores para el nombre de usuario
(id) y la contraseña del usuario (pwd) se tendrá una
consulta normal a la base de datos que nos devolverá
los datos del usuario si la contraseña es correcta:
SELECT * FROM usr WHERE id = 'root' AND pwd =
'4358'
13. Si intentamos modificar la consulta poniendo cómo
contraseña ' OR '' = '
SELECT * FROM usr WHERE id = 'root' AND pwd = '
' OR '' = ' '
Como '' siempre es igual a '', habremos modificado la
consulta para que nos devuelva siempre los datos del
usuario aunque la contraseña sea incorrecta, y el
visitante malintencionado se podrá conectar como
cualquier usuario.
14. el visitante malintencionado podra conseguir
contraseñas, borrar, anñadir y modificar datos de
nuestra base de datos... por eso es importanto
que nos aseguremos que nuestro sitio es seguro
en este aspecto.
15. ¿Que debo hacer?
En el caso de que tu servidor haya dado
resultado positivo, será porque no se preocupa
de cambiar la comilla simple por ' , y en este
caso, deberemos ser nosotros los que
manualmente lo cambiemos de todas las
variables pasadas tanto por URL como vía
formulario:
16. inyeccion.php
// Evitamos la inyeccion SQL
// Modificamos las variables pasadas por URL
foreach( $_GET as $variable => $valor ){
$_GET [ $variable ] = str_replace ( "'" , "'" , $_GET [
$variable ]);
}
// Modificamos las variables de formularios
foreach( $_POST as $variable => $valor ){
$_POST [ $variable ] = str_replace ( "'" , "'" , $_POST
[ $variable ]);
}
17. Incluiremos este script en todas las
páginas realicemos consultas a la base
de datos:
// Evitamos la inyeccion SQL
include 'inyeccion.php' ;
//
// Contenido de la página PHP
//