Foros del Web » Programando para Internet » PHP »

Proteger fichero php

Estas en el tema de Proteger fichero php en el foro de PHP en Foros del Web. Hola a todos, tengo la siguiente duda: Tengo una pagina estatica, con un formulario de contacto, que manda la informacion a una base de datos ...
  #1 (permalink)  
Antiguo 21/07/2009, 02:12
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Proteger fichero php

Hola a todos,
tengo la siguiente duda:

Tengo una pagina estatica, con un formulario de contacto, que manda la informacion a una base de datos a traves de un php, que llamaremos 'add.php', el cual abre la conexion, comprueba los parametros y los inserta en la base de datos.

Obviamente, si pongo en la URL htp://direccionweb/add.php tambien se ejecuta la accion, sin parametros, pero se ejecuta...
¿Como puedo protegerlo para que solo pueda ejecutarse desde la web, o mejor, desde la web de mi servidor?
Muchas gracias a todos!
__________________
Fontaneria y tecnico electricista.
  #2 (permalink)  
Antiguo 21/07/2009, 02:18
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Proteger fichero php

Hola

En tu formulario agregale el nombre onsubmit al boton de envio.

ej
Código HTML:
<input type="submit" name="onsubmit" value="enviar"> 
En tu pagina add.php agrega estas lineas al principio

Código PHP:
if (isset($_POST['onsubmit']))
{

// Aqui el codigo para Abrir conexion, comprobar parametros e insertar en DB

// Colocas esta llave extra hasta el final. 

Es todo, saludos!
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #3 (permalink)  
Antiguo 21/07/2009, 02:54
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

ya...
Si me hacen:
htp://servidor.com/add.php?onsubmit=value ¿no va a ejecutarse igual?
__________________
Fontaneria y tecnico electricista.

Última edición por frilex; 21/07/2009 a las 02:54 Razón: url irrelevante
  #4 (permalink)  
Antiguo 21/07/2009, 03:10
 
Fecha de Ingreso: mayo-2005
Mensajes: 188
Antigüedad: 18 años, 11 meses
Puntos: 6
Respuesta: Proteger fichero php

No! Estás enviando el parámetro por GET y lo estás recogiendo por POST. No es "el mismo". Si aún quieres asegurar mas la página, también puedes comprobar el Referer, o usar la técnica del token en sesión.

Saludos.
  #5 (permalink)  
Antiguo 21/07/2009, 04:10
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

Bueno... Post se puede pasar por firebug sin mucho problema, tal vez el resto de soluciones se adapten mas.
El referer, ¿a nivel de .htaccess?
El token de sesion tiene buena pinta, ¿Tienes algun sitio donde pueda informarme mas?

Muchas gracias, ha sido de mucha ayuda
__________________
Fontaneria y tecnico electricista.
  #6 (permalink)  
Antiguo 21/07/2009, 04:36
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Proteger fichero php

el referer lo mirarías con php:


Código PHP:
<?php

if($_SERVER['HTTP_REFERER'] != 'http://tupag.com/tuformulario.php')

//no viene desde el formulario, paramos la ejecución
exit;

?>
  #7 (permalink)  
Antiguo 21/07/2009, 04:39
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

Muchas gracias albert1980. De todas formas, el referer es bastante facil de alterar, pero combinado tambien con el control de sesion puede servir.
A ver si alguien se anima con algun enlace majo...
Muchas gracias!
__________________
Fontaneria y tecnico electricista.
  #8 (permalink)  
Antiguo 21/07/2009, 04:58
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Proteger fichero php

un código simple de session control seria así:

en el código del formulario metes un nuevo input:



<input type="hidden" name="tok" value="<?php
if(!$_SESSION['sec'])
$_SESSION['sec'] = md5($_SERVER['REMOTE_ADDR'].'ascuig').md5(mt_rand);

?>">




y después en el que verifica:

if($_POST['tok'] != $_SESSION['sec']) exit;
  #9 (permalink)  
Antiguo 21/07/2009, 05:33
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

Eso que me dices da un poco de mal rollo.. me explico:
Si el valor del token aparece en la pagina generada... ¿No puede verse con un simple firebug?, o peor, con un 'ver codigo fuente'? Bastara poner el valor del token en la url, y tenemos el mismo problema que antes. ¿o me equivoco?
__________________
Fontaneria y tecnico electricista.
  #10 (permalink)  
Antiguo 21/07/2009, 06:19
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Proteger fichero php

Sí, pero todos los métodos se pueden evitar.

El mas difícil quizás seria poner un captcha aunque también se podría evitar ;)
  #11 (permalink)  
Antiguo 21/07/2009, 10:44
Avatar de dopon  
Fecha de Ingreso: julio-2005
Ubicación: Cucuta / Colombia
Mensajes: 493
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Proteger fichero php

Pues yo creo que podrias tene rne cuenta lo siguiente :

- Confirmas que la IP del que abrio el formulario sea la misma del que esta solicitando add.php
- Guardas el timestamp de el momento en que se carga el formulario y lo restas con el que generes en add.php miras si e sun tiempo prudencial (60 90 segundos por ejemplo)
- Usas un captcha
  #12 (permalink)  
Antiguo 21/07/2009, 15:07
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

Tampoco me vale.. no me puedo creer que nadie haya pasado por esto antes...
No hay variables de sesion, tipo JSP o algo parecido en php?
__________________
Fontaneria y tecnico electricista.
  #13 (permalink)  
Antiguo 21/07/2009, 15:21
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Proteger fichero php

Entonces por que no en la pagina del fomulario le pones. lo siguientes
Código PHP:
<?

session_start
();
$_SESSION['conectado'] = 1;

?>
y en add.php

le preguntas

Código PHP:
<?

session_start
();
if (
$_SESSION['conectado'] == 1)
{
tu codigo
}

session_destroy();

?>
sera eso o quieres otra cosa?

atte Patux
  #14 (permalink)  
Antiguo 21/07/2009, 15:49
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

Es eso, si realmente no se crea la variable al utilizarla en la URL...
¿me lo puedes confirmar?
__________________
Fontaneria y tecnico electricista.
  #15 (permalink)  
Antiguo 21/07/2009, 15:56
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Proteger fichero php

la variable de session debe ser creada y por url no se puede pasar. cuando pasas un valor por URL, lo pasas como variable del tipo GET.

bueno si te sirvio, es un alivio :P

saludos.

Patux
  #16 (permalink)  
Antiguo 21/07/2009, 16:03
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

bueno, con eso ya tenemos que tenga que pasar por la pagina.. y me parece bastante rudimentario. mas el referer, que tambien se puede saltar, mas el isset con post y get, que tambien se puede saltar...
Me veo un poco indefenso, la verdad...
__________________
Fontaneria y tecnico electricista.
  #17 (permalink)  
Antiguo 21/07/2009, 16:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Proteger fichero php

Existe algo que sea 100% por 100% seguro en internet?

no te atormentes.

pero usando algo tan rudimentario como eso, deberia funcionar bien.

por lo demas, que alguien se gaste en tratar "hackear" tu pagina pa enviar un correito, seria... como,, no se...

pero animo...

Saludos.... Patux
  #18 (permalink)  
Antiguo 21/07/2009, 18:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: Proteger fichero php

Hola
pero tu pregunta se centra en el file que procesa los datos
pero no especificas que es lo que quieres almacenar.
por ejemplo si lo que quieres es que lo que vas a recibir no este vasillo puedes usar algo como esto:
Código PHP:
<?php
//fom_html.php
$sel $_SERVER['PHP_SELF'];
echo 
'<a href="add.php?onsubmit=Value">Test_A</a><br />
<a href="add.php?onsubmit=">Test_B</a>'
;
?>
<?php
//php add.php
if(isset($_GET['onsubmit'])){
if(empty(
$_GET['onsubmit'])){
header("Location: fom_html.php");
}else{
echo 
'Prosesar';
  }
}
?>
aunque te recomiendo que no uses la función empty() por que se puede burlar fácilmente.
hay otros métodos para evitarlos

2 si quieres almacenar el registro de un usuario pues lo mismo tienes que verificar
si todos los campos esta llenos.

3 si es un comentario pues lo mismo, verificar si todos los campos esta llenos.
y depende de ti si quieres limitar un mínimo de caracteres a almacenar.

4 si es una respuesta a un comentario pues lo mismo. y si alguien intenta
almacenar una respuesta de un tema que no existe
pues por supuesto que se tiene que verificar antes que ese tema existe.


porque también si quires que un file php no responda a un llamado directamente
ej: www.dominio.com/no_ acceso_ directo.php
si no que solo por medio de otro file también se puede

para el file: no_ acceso_ directo.php
Código PHP:
defined'myConfig' ) or die( 'Texto aquí' ); 
y para el file que lo llamara
Código PHP:
define('myConfig'1); 
en este caso el file add.php solo responderá si el file fom_html.php lo llama
que puede ser por medio de un include('add.php');
__________________
╬-----╬
║☺₧☻║
╬-----╬

Última edición por thezzin; 21/07/2009 a las 18:47
  #19 (permalink)  
Antiguo 22/07/2009, 06:46
Avatar de frilex  
Fecha de Ingreso: junio-2009
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Proteger fichero php

gracias thezzin por la extensa respuesta, pero no es de los formularios vacios de lo que quiero proteger el php,
mas bien de llamadas externas que no pasan por el formulario de envio.
Ese punto en concreto, la parte que accede a la base de datos, es la mas sensible a ataques, y es la que quiero mantener aislada.
Para J2EE, lo haria a traves de variables de sesion, probablemente fuese lo mas practico. Para PHP... creo que voy a optar por lo mismo.
Si se os ocurre alguna otra solucion, soy todo oidos!
un saludo!
__________________
Fontaneria y tecnico electricista.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:06.