PHP SEGURIDAD (o cómo evitar que los malos nos jodan vivos)
PHP Hoy en día, hacer una web que no sea estática puede ser una pesadilla por la cantidad de ataques existentes
Algo tan simple como <?php echo $_GET['x']; ?> ya es una vulnerabilidad en una página web Sí, lo digo en serio ¡Muy en serio!
PHP 2 reglas básicas: NUNCA confiar en datos que provengan del usuario
&quot;Filter your input, Escape your output&quot; Además de éstas hay otras a tener en cuenta, pero sin duda éstas son las más importantes
PHP No confiar en datos que vienen del usuario (i) Si el usuario puede modificar el valor de una variable, no se debe confiar nunca en este dato productos.php?id=4
El usuario puede modificar fácilmente el id de producto a visualizar, y poner, en vez de un número, cualquier otra cosa
¡¡¡Asegurarse que $_GET['id'] es un número!!!
PHP No confiar en datos que vienen del usuario (ii) En el caso anterior está muy claro que el usuario puede modificar el id que nos envía.
En el formulario que aparece aquí al lado, un usuario también puede modificar el valor del mes ¿Cómo? Modificando el html y luego enviando el formulario a su destino
O usando plugins para el navegador
¡10 minutos de ejercicio!
PHP No confiar en datos que vienen del usuario (iii) Visto lo visto con el ejercicio anterior, espero que todos comprobéis que lo que os llega a través de formularios son valores válidos antes de empezar a trabajar con ellos
Datos que puede modificar el usuario: $_GET, $_POST, $_REQUEST, $_COOKIE, $_FILES* , $_SERVER*  * Algunos campos únicamente
PHP Filter your input, Escape your output (i) Filter your input se refiere a lo que ya hemos comentado antes... no confiar en los datos que envía el usuario
Cada vez que enviamos datos a un medio, hemos de evitar que caracteres especiales para ese medio que puedan existir en los datos que enviamos se interpreten como tales: Comillas (simples o dobles) en bases de datos
<, >, &, ', &quot; en html
', &quot;, $, ;, ` al ejecutar comandos en la terminal
PHP Filter your input, Escape your output (ii) SQL Injection (i) Sucede cuando no escapamos las ' o &quot; en una consulta a la base de datos
$sql = &quot;SELECT * FROM usuarios WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'&quot;;
Si nos envían usuario 'pepe' y contraseña 'patata'
$sql = &quot;SELECT * FROM usuarios WHERE username='pepe' AND password='patata';
¡Sin peligro!
PHP Filter your input, Escape your output (iii) SQL Injection (ii) Un atacante podría introducir esto como username: ' OR id=1 -- (tal cual, con la comilla incluída)

Seguridad en PHP (es)

  • 1.
    PHP SEGURIDAD (ocómo evitar que los malos nos jodan vivos)
  • 2.
    PHP Hoy endía, hacer una web que no sea estática puede ser una pesadilla por la cantidad de ataques existentes
  • 3.
    Algo tan simplecomo <?php echo $_GET['x']; ?> ya es una vulnerabilidad en una página web Sí, lo digo en serio ¡Muy en serio!
  • 4.
    PHP 2 reglasbásicas: NUNCA confiar en datos que provengan del usuario
  • 5.
    &quot;Filter your input,Escape your output&quot; Además de éstas hay otras a tener en cuenta, pero sin duda éstas son las más importantes
  • 6.
    PHP No confiaren datos que vienen del usuario (i) Si el usuario puede modificar el valor de una variable, no se debe confiar nunca en este dato productos.php?id=4
  • 7.
    El usuario puedemodificar fácilmente el id de producto a visualizar, y poner, en vez de un número, cualquier otra cosa
  • 8.
  • 9.
    PHP No confiaren datos que vienen del usuario (ii) En el caso anterior está muy claro que el usuario puede modificar el id que nos envía.
  • 10.
    En el formularioque aparece aquí al lado, un usuario también puede modificar el valor del mes ¿Cómo? Modificando el html y luego enviando el formulario a su destino
  • 11.
    O usando pluginspara el navegador
  • 12.
    ¡10 minutos deejercicio!
  • 13.
    PHP No confiaren datos que vienen del usuario (iii) Visto lo visto con el ejercicio anterior, espero que todos comprobéis que lo que os llega a través de formularios son valores válidos antes de empezar a trabajar con ellos
  • 14.
    Datos que puedemodificar el usuario: $_GET, $_POST, $_REQUEST, $_COOKIE, $_FILES* , $_SERVER* * Algunos campos únicamente
  • 15.
    PHP Filter yourinput, Escape your output (i) Filter your input se refiere a lo que ya hemos comentado antes... no confiar en los datos que envía el usuario
  • 16.
    Cada vez queenviamos datos a un medio, hemos de evitar que caracteres especiales para ese medio que puedan existir en los datos que enviamos se interpreten como tales: Comillas (simples o dobles) en bases de datos
  • 17.
    <, >, &,', &quot; en html
  • 18.
    ', &quot;, $,;, ` al ejecutar comandos en la terminal
  • 19.
    PHP Filter yourinput, Escape your output (ii) SQL Injection (i) Sucede cuando no escapamos las ' o &quot; en una consulta a la base de datos
  • 20.
    $sql = &quot;SELECT* FROM usuarios WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'&quot;;
  • 21.
    Si nos envíanusuario 'pepe' y contraseña 'patata'
  • 22.
    $sql = &quot;SELECT* FROM usuarios WHERE username='pepe' AND password='patata';
  • 23.
  • 24.
    PHP Filter yourinput, Escape your output (iii) SQL Injection (ii) Un atacante podría introducir esto como username: ' OR id=1 -- (tal cual, con la comilla incluída)