Evitar inyección SQL limpiando las variables con PHP
Cuando vamos a insertar datos a nuestra base de datos con PHP, tenemos que tener especial cuidado con las inyecciones SQL y demás intentos de que nos inserten datos maliciosos por parte de algún usuario. La siguiente función es probablemente la manera más completa y eficiente de limpiar una cadena de texto antes de insertarla en nuestra base de datos.
function cleanInput($input) { $search = array( '@<script[^>]*?>.*?</script>@si', // Elimina javascript '@<[\/\!]*?[^<>]*?>@si', // Elimina las etiquetas HTML '@<style[^>]*?>.*?</style>@siU', // Elimina las etiquetas de estilo '@<![\s\S]*?--[ \t\n\r]*>@' // Elimina los comentarios multi-línea ); $output = preg_replace($search, '', $input); return $output; } function sanitize($input) { if (is_array($input)) { foreach($input as $var=>$val) { $output[$var] = sanitize($val); } } else { if (get_magic_quotes_gpc()) { $input = stripslashes($input); } $input = cleanInput($input); $output = mysql_real_escape_string($input); } return $output; }
Un ejemplo de cómo usar esta función:
$cadena_maliciosa = "Hola <script src='http://www.evilsite.com/bad_script.js'></script> Es un buen día!"; $cadena_limpia = sanitize($cadena_maliciosa); // $cadena_limpia devuelve "Hola! Es un buen día!" // También lo puedes usar para las variables POST/GET $_POST = sanitize($_POST); $_GET = sanitize($_GET);