¿Cómo asegurar un archivo login.php? [cerrado]

-2

Tengo un sitio web creado a mano, y estoy tratando de construir un cms / admin-panel, y mi nombre de usuario y contraseña, no se almacenan en una base de datos, pero, en un archivo de configuración dos como se ve a continuación.

index.php

<?php 
session_start(); 

define('DS',  TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF',  $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
 include('login.php');

// everything below will show after correct login 
?>

login.php

<?php defined('DS') OR die('No direct access allowed.');

$users = array(
 "user" => "userpass"
);

if(isset($_GET['logout'])) {
    $_SESSION['username'] = '';
    header('Location:  ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
  $_SESSION['username'] = $_POST['username'];
  header('Location:  ' . $_SERVER['PHP_SELF']);
    }else {
        //invalid login
  echo "<p>error logging in</p>";
    }
}

echo '<form method="post" action="'.SELF.'">
  <h2>Login</h2>
  <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
  <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
  <p><input type="submit" name="submit" value="Login" class="button"/></p>
  </form>';
exit; 
?>

Fuente del código: php - Script de inicio de sesión fácil sin base de datos - Desbordamiento de pila

  

¿Cuál es la mejor manera de proteger esos archivos?

    
pregunta blade19899 06.11.2013 - 12:38
fuente

2 respuestas

4

Owen cubrió algunos cambios razonables, pero a menos que el código sea un ejercicio desechable en el aula donde no es posible usar una base de datos, la idea de almacenar los detalles del usuario en un archivo PHP es fundamentalmente defectuosa y debería abordarse ahora antes de demasiado tarde. Las contraseñas no deben almacenarse en texto sin formato, y administrarlas con hash almacenadas de esta manera será, en el mejor de los casos, engorroso, pero ¿cómo cambiarán los usuarios sus contraseñas, por ejemplo?

También debe considerar la imagen de seguridad más grande, y el impacto que tendrá cuando su servidor (o el de un usuario final) sea interrumpido. ¿Cómo evitará que se realice un cambio en su código para registrar de manera silenciosa los detalles del usuario ingresados en un archivo para su posterior recopilación por parte de un hacker? (revelación: estoy asociado con ionCube)

    
respondido por el Nick 06.11.2013 - 13:13
fuente
3

Nada de esto es ideal, pero si va a almacenar los detalles de la cuenta en un archivo PHP, diría que los siguientes pasos son mínimos:

  • No almacene la contraseña en texto sin formato. Siendo realistas, esto es solo una precaución adicional, pero deberías tomarla de todos modos.
  • Mantenga el account.php fuera de la raíz del sitio, en algún lugar al que no se pueda acceder mediante una URL directa. Si su sitio está en / home / user / www / http_root o algo así, entonces mantener account.php en / home / user / www sería una buena idea.
  • Defina una constante para mostrar que su aplicación se está ejecutando, e inicie su archivo account.php con una línea que verifique esta constante, o muera si la constante no está establecida.

Todo esto es solo una mejora vaga de la seguridad, en lugar de la mejor práctica real.

    
respondido por el Owen 06.11.2013 - 12:47
fuente

Lea otras preguntas en las etiquetas