Seguridad en php...

SeiYa

Bueno, esto es para que me digais o aconsejeis mas o menos el como añadis seguridad a vuestros sitios programados en php.

Yo de momento tengo poca cosa hecha, pero vamos, en todo .php que reciba un $POST llamo a: "limpiar_codigo($POST);" que lo que hace es:

function limpiar_codigo (&$arrayes)
{
foreach ($arrayes as $clave => $valor)
{
if (!is_array($_POST[$clave]))
{
$arrayes[$clave]=trim($arrayes[$clave]);
$arrayes[$clave]=strip_tags($arrayes["$clave"]);
$arrayes[$clave]=escapeshellcmd ($arrayes["$clave"]);
}
else
{
limpiar_codigo ($arrayes["$clave"]);
}
}
}

Ademas, siempre que muestro variables sacadas de la base de datos (tipo noticias, informacion de los perfiles o comentarios) hago esto:

$mensaje = strip_tags(htmlentities($_POST['mensaje']));

Tanto al enviar a la base de datos como al recibir de la misma, en teoria valdria con hacerlo una sola vez, pero por si acaso, siempre viene bien cerrar la puerta con llave.

Mi duda principalmente era que mas cosas añadis vosotros para mejorar la seguridad de la pagina web y que no existan intrussiones tipo Cross Site Scripting o SQL Injections y demas ...

Gracias y un saludo.

erdanblo

¿Sueles hacer casteo de variables?

Con eso puedes evitar los SQL Injection...

Otra cosa, que averigué... es llamar diferente a los input's o textarea a como los llamas en las base de datos, es decir:

Si tienes un input para poner un nick (para acceder a una base de datos o lo que sea) y lo llamas "nick" en la base de datos, llamalo de otra manera... por ejemplo "usuario"... no se si me explico.

Te pasaria donde lo ví, pero es que no me acuerdo muy bien.

SeiYa

Si, te entiendo perfectamente, la verdad es que pensandolo bien es muy logico...

¿Casteo de variables te refieres a .. ? es que no se a que te refieres XD

¿ Por ejemplo a las variables tipo .php?accion=... ?

Comentadme mas cositas o trucos o webs donde aparezcan es que en google todos hablan de php nuke XD

P.D. Si te refieres a variables que solo inicializo en un condicional y en el caso de que no se cumplan las puede inicializar por la barra de direcciones no tengo ninguna, solo las tipicas de accion y operaciones para saber que tipo de seccion acceder, pero estan todas las secciones en un mismo .php (no se si es mejor o peor) y no acceden las variables a nada externo.

erdanblo

http://es2.php.net/language.types.type-juggling

DarkSoldier

al añadir noticia desde el menu HTML la seguridad... no se, dudo que te intentes joder a ti mismo, me centraria mas en la carpeta de administracion y el nombre de los archivos @_@

Whose

Para limpiar tu cadena puedes limitarla a numeros (que es tu proposito), para eso puedes usar una funcion que soporte expresiones regulares.
http://www.php.net/ereg_replace

Erdanblo si en una cadena pones "123abc" quedaria "123 pero si pones "123abc123" imprimiria "0" por lo que no vale para este caso.
http://es2.php.net/int

Prueba con esto Seiya y veras como asi si funciona ;)
<?php

$string = "abc123abc@555#";
echo ereg_replace('[0-9]*', '', $string);
?>

guner

$string_limpia = (int) $string; // -> FEO

settype($var, "integer");

SeiYa

Ehm ... yo nunca dije nada de que quisiera quitar letras ni numeros XD

erdanblo

#7 Mola mucho más asi, pero en el manual no lo vi :/

Whose

Seiya pero para evitar sql injection en una consulta MySQL donde buscas a partir de una id numerica pues te viene de lujo como seguridad, tambien puedes modificar la expresion regular para que solo permita letras y numeros y evitar caracteres raros y demas :)

DarkSoldier

hay una funcion que te "elimina" los signos raros que viene con la extension mysql, creo que en la version 4.x y 5.x esta.. pero no se deberias mirarlo, la funcion es:
mysql_real_escape_string(); creo recordar.. y recomendacion de bleed de php_parA_torpes, pasale antes un stripslashes ^^ ahi keda eso

Usuarios habituales

  • DarkSoldier
  • Whose
  • erdanblo
  • SeiYa
  • guner