Foros del Web » Programando para Internet » PHP »

Problema con Sistema de Proteccion de pagina.

Estas en el tema de Problema con Sistema de Proteccion de pagina. en el foro de PHP en Foros del Web. Hola gente! tengo una pagina que es el editor de entradas de mi web. En la cual se crean los articulos. Este es el Codigo: ...
  #1 (permalink)  
Antiguo 12/09/2012, 12:09
Avatar de datcom  
Fecha de Ingreso: enero-2011
Ubicación: Universo local, Vía láctea, Planeta Azul.
Mensajes: 216
Antigüedad: 13 años, 2 meses
Puntos: 0
Problema con Sistema de Proteccion de pagina.

Hola gente!
tengo una pagina que es el editor de entradas de mi web. En la cual se crean los articulos.
Este es el Codigo:

Código PHP:
<?php
/*************************************************
 * Micro News
 *
 * Version: 1.0
 * Date: 2007-07-12
 *
 *
 ****************************************************/

if (!isset($_POST['submit'])) {

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
   <title>Micro News</title>
   <link href="style/style.css" rel="stylesheet" type="text/css" />
   <script language="javascript" type="text/javascript" src="js/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    theme_advanced_buttons3 : "",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",

});
</script>
</head>

<body>
  <div id="main">
    <div id="caption">Micro News - Add news</div>
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        News title:<br/>
        <input type="text" name="title" size="40"/><br/><br/>
        Content:<br/>
        <textarea name="newstext" rows="15" cols="67"></textarea><br/>
        <center><input type="submit" name="submit" value="Save" /></center>
     </form> 
     
      <div id="source">Micro News 1.0</div>
  </div>
</body>   

<?php } else {
   
$newsTitel   = isset($_POST['title']) ? $_POST['title'] : 'Untitled';
   
$submitDate  date('Y-m-d g:i:s A');
   
$newsContent = isset($_POST['newstext']) ? $_POST['newstext'] : 'No content';
   
   
$filename date('YmdHis');
   
$f fopen('news/'.$filename.".txt","w+");         
   
fwrite($f,$newsTitel."\n");
   
fwrite($f,$submitDate."\n");
   
fwrite($f,$newsContent."\n");
   
fclose($f);

   
header('Location:index.php');   
}
?>
Funciona barbaro hasta que le decidi poner una simple login con password para hacer mas seguro esta pagina. El tema es que cuando le doy a salvar articulo, en vez de redireccionar como hace siempre al index.php se queda en el admin.php pidiendome denuevo el pass.

Este es el codigo del Microprotector
Código PHP:
<?php
/**
 * ****************************************************************************
 * Micro Protector
 * 
 * Version: 1.0
 * Release date: 2007-09-10
 * 
 * USAGE:
 *   Define your requested password below and inset the following code
 *   at the beginning of your page:
 *   <?php require_once("microProtector.php"); ?>
 * 
 *   See the attached example.php.
 * 
 ******************************************************************************/


$Password 'demo'// Set your password here



/******************************************************************************/
   
if (isset($_POST['submit_pwd'])){
      
$pass = isset($_POST['passwd']) ? $_POST['passwd'] : '';
      
      if (
$pass != $Password) {
         
showForm("Wrong password");
         exit();     
      }
   } else {
      
showForm();
      exit();
   }
   
function 
showForm($error="LOGIN"){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
   <title>Micro Protector</title>
   <link href="style2/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div id="main">
      <div class="caption"><?php echo $error?></div>
      <div id="icon">&nbsp;</div>
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd">
        Password:
        <table>
          <tr><td><input class="text" name="passwd" type="password"/></td></tr>
          <tr><td align="center"><br/>
             <input class="text" type="submit" name="submit_pwd" value="Login"/>
          </td></tr>
        </table>  
      </form>
      <div id="source">Micro Protector 1.0</div>
   </div>
</body>   
   
<?php   
}
?>
y este es el llamado que le coloco en el admin.php para que la pagina me pida password:
Código PHP:
 <?php require_once("microProtector.php"); ?>
Que paso? porque no redirecciona correctamente y me imprime el articulo?

Gracias

PD: les dejo la pagina colgada: http://document.site88.net/admin.php
El pass es "demo"
__________________
De la Luz venimos, y hacia la Luz vamos.
Solo hay una sola verdad, y esa es el Amor.
Ayuda aquien tienes al lado y seras ayudado.
Ánimo!

Última edición por datcom; 12/09/2012 a las 12:13 Razón: me olvide un enlace
  #2 (permalink)  
Antiguo 12/09/2012, 12:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Sistema de Proteccion de pagina.

Recuerda que PHP es un lenguaje "stateless" es decir las variables no se mantienen en cada request. Para ayudarte en eso PHP hace uso de "sesiones" que son variables que sí permanecen en cada request.

Viendo esto lo que tienes que hacer es, al autentificar tu usuario, creas una sesión nueva con un valor X, que marque que existe una sesión correcta. Luego al hacer el post con tu noticia, compruebas ese valor de la sesión y si existe y es el esperado permites la inserción.

Saludos.
  #3 (permalink)  
Antiguo 12/09/2012, 12:50
Avatar de datcom  
Fecha de Ingreso: enero-2011
Ubicación: Universo local, Vía láctea, Planeta Azul.
Mensajes: 216
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con Sistema de Proteccion de pagina.

Entiendo poco y nada lo que me decis, te agradezco porque parece correcto. Pero yo pienso ... Si hay una pagina que me direcciona a otra si el pass es OK , porque esta pagina en la que me encuentro ahora no funciona con la normalidad. la unica diferencia ahora en la pagina es este llamado:

<?php require_once("microProtector.php"); ?>
que esta el principio.

Osea debo suponer que hay algo en microProptector.php que intefiere en admin.php?
Eso que interfiere, como lo soluciono.

Me suena a mas sencillo de lo que me decis, quizas es porque no se nada de php.
Gracias
__________________
De la Luz venimos, y hacia la Luz vamos.
Solo hay una sola verdad, y esa es el Amor.
Ayuda aquien tienes al lado y seras ayudado.
Ánimo!
  #4 (permalink)  
Antiguo 12/09/2012, 13:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Sistema de Proteccion de pagina.

No es que interfiera, simplemente es natural, ve tu proceso, tu pagina microProtector te deja entrar si el password es igual a pass, este llega por $_POST, entonces este es el flujo:

Entras a tu pagina, dentro haces el require a microProtector y verifica que $_POST['passwd'] sea igual a "pass", como no es, te muestra tu formulario de login, y todo bien.

Insertas tu password y haces un POST de nuevo a la misma pagina, esta vez al entrar a microPortector si existe $_POST['passwd'] y es igual a pass, entonces te muestra tu pagina original (admin.php).

Al enviar el formulario de admin.php por POST, en este punto ya no vuelve a existir $_POST['passwd'], ya que se perdió al terminar de cargar la pagina (por la naturaleza stateless de PHP).

Es por eso que para solucionarlo de esto puedes hacer dos cosas:

1.- Agregar un campo tipo hidden en tu formulario de admin.php que se llame passwd y pongas ahí el password para que al enviar siga existiendo $_POST['passwd'] y te permita insertar las noticias.

2.- Usar una sesión para autentificar a tu usuario, así al hacer el post simplemente checas que exista la sesión correcta y en caso correcto permitir el acceso al usuario.

Saludos.
  #5 (permalink)  
Antiguo 12/09/2012, 16:51
Avatar de datcom  
Fecha de Ingreso: enero-2011
Ubicación: Universo local, Vía láctea, Planeta Azul.
Mensajes: 216
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con Sistema de Proteccion de pagina.

y como hago cualquiera de las dosopciones, cual es mas facil
__________________
De la Luz venimos, y hacia la Luz vamos.
Solo hay una sola verdad, y esa es el Amor.
Ayuda aquien tienes al lado y seras ayudado.
Ánimo!
  #6 (permalink)  
Antiguo 12/09/2012, 18:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Sistema de Proteccion de pagina.

Pues analiza lo que te digo, la opción más sencilla es agregar el campo oculto, y la correcta es usar una sesión.

Saludos.
  #7 (permalink)  
Antiguo 13/09/2012, 04:56
Avatar de datcom  
Fecha de Ingreso: enero-2011
Ubicación: Universo local, Vía láctea, Planeta Azul.
Mensajes: 216
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con Sistema de Proteccion de pagina.

Asi seria?
<input type="hidden" value="hiddenvalue1" name="passwd" />
__________________
De la Luz venimos, y hacia la Luz vamos.
Solo hay una sola verdad, y esa es el Amor.
Ayuda aquien tienes al lado y seras ayudado.
Ánimo!
  #8 (permalink)  
Antiguo 13/09/2012, 08:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Sistema de Proteccion de pagina.

Así se declara un hidden, pero esa no es la solución correcta ya que la variable que tienes que comparar se llama passwd.
  #9 (permalink)  
Antiguo 14/09/2012, 12:03
Avatar de datcom  
Fecha de Ingreso: enero-2011
Ubicación: Universo local, Vía láctea, Planeta Azul.
Mensajes: 216
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con Sistema de Proteccion de pagina.

Comos seria bien sentenciada... si sos tan amable podrias mostrarme?
__________________
De la Luz venimos, y hacia la Luz vamos.
Solo hay una sola verdad, y esa es el Amor.
Ayuda aquien tienes al lado y seras ayudado.
Ánimo!

Etiquetas: html, proteccion, sistema
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 10:58.