Ataques comunes

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Cross Site Scripting – XSS

Ocurre cuando el usuario es capaz de inyectar javascript en la url y este es ejecutado, por ejemplo porque en alguna parte del código se está haciendo un echo.

Ejecutar javascript dentro de tu página puede servir para robar cookies, o enviar información a otro servidor.

La solución pasa por sanitizar todas las peticiones echas al navegador.Ver solución

Cross-site request forgery (CSRF)

Una vez que te has logueado en una cuenta privada (facebook, gmail banco), el hacker logra que pulses uno de sus enlaces o visualices cierta foto sin que te hayas deslogueado.

<img src=https://bank.com/transfer?amount=1000&to=1238891746” />

Solución:

  • Las peticiones que hacen cambios deberían ser recogidas siempre con POST.
  • Crear un token en el formulario de envío y comprobarlo en la recepción.

Inyección SQL

Dada la siguiente consulta:

$result = mysqli_query("SELECT Username, Password FROM Users WHERE Username = '".$_POST['username']."' and Password = '".$_POST['password']."'");

Si el usuario introdujese el siguiente usuario en el formulario: ‘ OR 1=1 #

La consulta que va a ser ejecutada sería esta:

SELECT Username, Password FROM Users WHERE Username = '' OR 1=1 #' and Password = ''

La almohadilla (#) le dice aMySQL que todo que le sigue es un comentario y que no debe de hacerle caso. Ejecutará SQL hasta ese punto. Después 1 es igual a 1, SQL devolverá todos los usuarios y contraseñas de la base de datos. Y como la primera combinación del usuario y de contraseña en la mayoría de las bases de datos es la de el administrador… tendremos un problema.

Solución al problema:

  • Limitar los privilegios del usuario de la base de datos (que no pueda borrar tablas, etc.)
  • Sanitizar la instrucción SQL. → $parametro = addslashes(trim($parametro));
  • Prepared statements (ver código php).

Ver ejemplo.

Ataques desde formularios de otros servidores

function request_is_same_domain(){
	if(!isset()){
		return false;
	}else{
		$referer_host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
		$server_host =  $_SERVER['HTTP_HOST'];
	}
	return ($referer_host == $server_host)?true:false;
}
		

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.