Foros del Web » Programando para Internet » PHP »

Proteger acceso directo a un archivo

Estas en el tema de Proteger acceso directo a un archivo en el foro de PHP en Foros del Web. Si ya se que es una pregunta típica, pero es que por más que aplico diferente script no me funciona ninguno. Mirar tengo el archivo ...
  #1 (permalink)  
Antiguo 30/09/2010, 17:39
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Proteger acceso directo a un archivo

Si ya se que es una pregunta típica, pero es que por más que aplico diferente script no me funciona ninguno.

Mirar tengo el archivo index.php que envia el formulario a recibido.php en el cual hago un UPDATE a la base de datos. ¿como impido el acceso directo a recibido.php?

ya he probado sin exito:

if($_SERVER['HTTP_REFERER'] != "index.php"){
echo "No puede acceder a este pagina de forma directa <br> Acseso Denegado !";
exit;
}


Y tambien a poner indices en archivo define('_INDICE_',true); y en recibido.php if (!defined('_INDICE_')) die("acceso denegado");

¿Que puedo hacer? mi archivo abajo:

index.php
Código PHP:
<?php
 error_reporting
(0);
    
session_start();
    if(!isset(
$_SESSION['idioma'])){
        
$_SESSION['idioma']="english";
    }


     include(
"languages.php");
     
$palabra = new idiomas();
     include(
"configuration.php");
     
$conexion=mysql_connect("$server","$user","$password");
     
mysql_select_db("$database");

     
$sql="select * from empleados where dni=0";
     
$result=mysql_query($sql);
     
$row=mysql_fetch_assoc($result);
     
$content=$row['horas'];


if(isset(
$_POST['save'])) {
    print 
"<pre>";
    
print_r($_POST);
    print 
"</pre>";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

</head>
<body>

<form method="post" action="recibido.php">
    <div>
        <div><br /><input type="submit" name="save" value="Save" /><input type="reset" name="reset" value="Reset" />
            <textarea id="elm" name="elm">
                        
            </textarea>
        </div>
        <br />

    </div>
</form>
</body>
</html>
recibido.php
Código PHP:
<?php
     
include("configuration.php");
     
$conexion=mysql_connect("$server","$user","$password");
     
mysql_select_db("$database");

$sql="UPDATE ...";

if (!
mysql_query($sql,$conexion))
  {
  die(
'Error');
  }
echo 
"enviado!";



?>
  #2 (permalink)  
Antiguo 30/09/2010, 17:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Proteger acceso directo a un archivo

Podrías usar sesiones y hacer verificaciones que solo tu puedes saber. Por ejemplo en una página que tenga un formulario, tiene una sesión y un valor que solo vas a saber que existe para ese formulario (o página web mejor dicho). Ejemplo

addForm.php
Código PHP:
Ver original
  1. <?php
  2. $_SESSION['whatType'] = 'addFormSession';

updateForm.php
Código PHP:
Ver original
  1. <?php
  2. $_SESSION['whatType'] = 'updateFormSession';

Luego en la parte de añadir colocas algo como
Código PHP:
Ver original
  1. <?php
  2. if($_SESSION['whatType'] == 'addFormSession'){
  3.     // código insert, etc...
  4. }
  5.  
  6. if($_SESSION['whatType'] == 'updateFormSession'){
  7.     // código update, etc...
  8. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 01/10/2010, 01:53
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Proteger acceso directo a un archivo

ahora entiendo lo que ocurre, y si funciona, pero el problema es que el mismo usuario, por error a veces puede volver pulsar o refrescar la pagina www.misitio/recibido.php, y entonces lo que ocurre es vuelve a ejecutarse la sentencia UPDATE y me borra la base de datos

?Como hacer para que solo se ejecute si procede del formulario exclusivamente?

muchas gracias por ayudarme.
  #4 (permalink)  
Antiguo 01/10/2010, 02:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Proteger acceso directo a un archivo

Cita:
Iniciado por manupalaya Ver Mensaje
ahora entiendo lo que ocurre, y si funciona, pero el problema es que el mismo usuario, por error a veces puede volver pulsar o refrescar la pagina www.misitio/recibido.php, y entonces lo que ocurre es vuelve a ejecutarse la sentencia UPDATE y me borra la base de datos

?Como hacer para que solo se ejecute si procede del formulario exclusivamente?

muchas gracias por ayudarme.
podrías revisar si en el $_POST viene el save (o submit) y si es así, es que viene del formulario, si no, pues ya sabes
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 01/10/2010, 02:58
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Proteger acceso directo a un archivo

Exacto ese era el problema, por si alguien le vale he hecho un mix de manera que no te deja acceder directamente y además inmediatamente despues de enviar el formulario vuelve atras y asi el usuario no se queda en recibido.php

Código PHP:
<?php
session_start
();
if(isset(
$_POST['save'])) {
     include(
"configuration.php");
     
$conexion=mysql_connect("$server","$user","$password");
     
mysql_select_db("$database");

$sql="UPDATE..........";

if (!
mysql_query($sql,$conexion))
  {
  die(
'Error, please try again.');
  }
echo 
"Envado!";

}

?>
<html>
    <body onload="javascript:window.history.back()"></body>
</html>
gracias a todos
  #6 (permalink)  
Antiguo 01/10/2010, 05:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Proteger acceso directo a un archivo

En vez de usar javascript para redireccionar usa la funcion header. Como no envia informmacion al navegador y se mantuvo antes del ambito de las cabeceras no va a aparecer registro alguno en el historial.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 01/10/2010, 08:42
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Proteger acceso directo a un archivo

buena idea. mil gracias he podido terminarlo :)

Etiquetas: directo, proteger
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 02:40.