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);