Bueno debido a que muchos no le dan la debida importancia a la seguridad o no saben casi nada sobre el tema les dejo aquí un tutorial para que pueden protegerse.
Bueno si tu aplicación trabaja con formularios o manejo de superglobales POST, GET debes protegerte de ataques xss o rfi.
Xss:
Debes Filtrar todas las superglobales que el usuario puede modificar con la función htmlentities() que se encarga de tratar los códigos html como texto plano, así que cuando alguien intente <b>Texto</b> lo mostrara de la misma forma y no se pondrá el texto en negritas.
Rfi:
Bueno para protegerte de un rfi no puedes incluir una variable que el usuario toque sin asesorarte de que sea el script que verdaderamente debe incluirse, para eso existen muchos sistemas de modulación.
Ahora si tu aplicación trabaja con base de datos solo tienes que filtrar todas las superglobales con la funcion mysql_real_escape_string() que se encarga de colocar barras invertidas ante estos caracteres \x00, \n, \r, \, ', " y \x1a.
Mas Información de las funciones antes mencionadas:
- http://es.php.net/mysql_real_escape_string
- http://es.php.net/htmlentities
Ejemplos:
// Mostrando un Texto
$texto = htmlentities($_POST[texto]);
echo $texto;
// Actualizando una tabla
$nick = mysql_real_escape_string($_POST['nick']);
$password = mysql_real_escape_string($_POST['password']);
$actualizacion = "UPDATE usuarios SET password = '$password' WHERE nick = '$nick'";
mysql_query($actualizacion);
Bueno espero que les sirva de ayuda y si tienen alguna duda sobre seguridad o PHP en general me envían un Mensaje Privado y con gusto les ayudare.
Saludos, Dacan :D
Mas Sencillo .. XSS Una Funcion Rapida:
<?
// Pequeña Funcion Para ' Sanar ' Variables
// Tec-n0x
function clean($var) {
$var = addslashes($var);
$var = htmlspecialchars($var, ENT_QUOTES);
return $var;
}
$str = clean($_GET['xssme']);
echo "$str";
?>
Para RFI Simplemente Utilizar Case:
<?
// Pequeño Anti-RFI
// Tec-n0x
$id = $_GET['id'];
switch($id) {
case home:
include('home.php');
break;
case test:
include('test.php');
break;
default:
include('def.php');
break;
}
?>
Podrias ampliarlo mas. como manejar sesiones / cookies correctamente etc.
Saludos
No me gusta Htmlspeacialchars porque:
Convierte los caracteres a otra cosa, ejemplo:
<?php
$nuevo = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $nuevo; // <a href='test'>Test</a>
?>
Saludos, Dacan :D