Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/01/2018, 02:42
Avatar de fbedia
fbedia
 
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: evitar hackeo por envio de variables ($_post)

Cita:
Iniciado por jiten Ver Mensaje
estimados amigos una base de datos ha sido vulnerada , al parecer se fijaron en el nombre del archivo que ejecuta el action (form) y enviaron las variables $_post desde otro archivo/otro servidor.

Lo que se me ha ocurrido para prevenir esto es, poner en el archivo que tiene la action a ejecutar (que es el que lleva el comando SQL) un filtro, verificando que el archivo anterior (desde donde se envian las variables POST) está en el mismo servidor mío, así que cualquier otro formulario falso creado para vulnerar la data, simplemente no sea ejecutado....

mi pregunta es... con qué comando verifico si el archivo anterior es uno de mi servidor ? como se verifica la url inmediata anterior ?

a alguien le ha pasado esto ? gracias !
Yo orientaría la solución por otro lado, ya que también pueden llegarte tanto peticiones $_post como $_get manipuladas desde tu propio servidor.

Lo que deberias de hacer en la pagina que procesas las variables, seria filtrar cada una de elllas... por ejemplo:

Código PHP:
if(isset($_POST['nombre']) && isset($_POST['apellidos']) && isset($_POST['campo3']) && isset($_POST['campo4'])) {
//validacion del nombre
if(strlen($_POST['nombre'])>=&& strlen($_POST['nombre'])<=30) {
//otras validaciones.. por ejemplo una expresion regular para validar solo qe contenta texto... etc
} else {
echo 
"nombre erroneo.. fallo en logitud";
}

Si te fijas en el codigo anterior, primero validamos con un isset() que las variables esperadas existen.

Por otro lado, yo te he puesto un ejemplo con la varianle $_POT['nombre'], pero deberias hacerlo con cada una de las variables:
- valida la logitud de las cadenas dentro de un rango estimado.
- valida el tipo de variable, por ejemplo con una extesion regular... o mediante funciones propias de php, por ejemplo si esperas un numero haz un if(ctype_digit($_POST['edad'])).... o si esperas un email, hay muchas funciones por google para validar el formato email...

Espero haberte ayudado!
Salu2
__________________
Follow me on twitter @franbedia