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.
Un ejemplo de cómo usar esta función:
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
;
}
$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
);
Comentarios
Publicar un comentario