La Seguridad en PHP se realiza filtrando las entradas del usuario, esto se debe realizar obligatoriamente para no tener en un futuro algunas sorpresas desagradables en nuestro servidor, estos consejos para validación de entradas en nuestras aplicaciones con PHP nos facilitaran el proceso.
Validar solo números
Si la entrada es una edad o algún valor numérico pequeño, podemos usar simplemente el CAST (int) de PHP
$numero = (int)$_POST['edad'];
Pero si nuestra entrada es una cadena de números podemos utilizar la siguiente expresion regular que filtrara de nuestra variable todos los caracteres que no sean numéricos
$output = preg_replace("/[^0-9-.]/", "", $data);
Esto permitirá también valores negativos y decimales.
Eliminar etiquetas HTML
Si deseas eliminar toda etiqueta HTML de una cadena puedes utilizar la función strip_tags, o si solo deseas que se muestre puedes encodificarlas con htmlspecialchars y no causara problemas al momento de mostrarlo.
$text = '<p>Test paragraph.</p> <!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text); // Permite <p> y <a> echo strip_tags($text, '<p><a>');
Filtrando cadenas en MySQL
Utilizando mysql_real_escape_string podemos filtrar las cadenas antes de enviarlas en una consulta SQL, esto para prevenir inyecciones SQL, si utilizamos PDO con PHP esto ya no es necesario porque lo tienen integrado.
$user = mysql_real_escape_string($_POST['username']); //'aidan'; $pass = mysql_real_escape_string($_POST['password']); //"' OR ''='"; $query = "SELECT * FROM users WHERE user='$user' AND password='$pass'"; mysql_query($query);
Utilizar filter_input
Si utilizas $_GET[‘id’] puedes utilizar esta alternativa y de paso filtrar valores al mismo tiempo
$itemId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS);
Se pueden utilizar como parámetro INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV
Que te parecieron estos consejos?, utilizas alguna validación más en tus aplicaciones?, puedes comentarlo y discutiremos alternativas y mejoras.
vía: ReadWriteWeb.com
Filtrar numeros o cadenas o Validar los datos de usuario es mucho mas eficiente hacerlo de lado del cliente con JavaScript.
Juan, en realidad se debe realizar de los dos lados (cliente y servidor), con Javascript es mas comodo para el usuario mostrarle los errores y no obligarlo a procesar datos y volver a cargar la pagina, pero cuando el usuario tiene malas intenciones y deshabilita el javascript puede haber un hueco en nuestra aplicación, es por eso que también tiene que realizarse la validación del lado del servidor.
Saludos.
Que alternativas hay para evitar el Cross site scripting ? Coincido con que Javascript no es una solución a los fines de evitar los ataques.
Muchas Gracias !