Tengo una página que quiero proteger con contraseña. Intenté hacer la autenticación HTTP, pero por alguna razón no funciona en mi hosting. ¿Alguna otra manera rápida (y fácil) de hacer esto? ¡Gracias!Manera fácil de proteger con contraseña la página php
Respuesta
No es exactamente la protección de contraseña más robusta aquí, así que no la use para proteger números de tarjeta de crédito o algo muy importante.
Simplemente inserte todo el siguiente código en un archivo llamado (secure.php), cambie el usuario y pase de "admin" a lo que desee. Luego, justo debajo de esas líneas donde dice incluir ("secure.html"), simplemente reemplace eso con el nombre de archivo que desea que puedan ver.
Accederán a esta página en [YouDomain.com/secure.php] y luego la secuencia de comandos PHP incluirá internamente el archivo que desea proteger con contraseña, por lo que no sabrá el nombre de ese archivo, y no puede más tarde solo acceda directamente evitando el aviso de contraseña.
Si desea agregar otro nivel de protección, le recomendaría que tome su archivo (secure.html) fuera de la carpeta raíz de su sitio [/ public_html], y lo coloque en el mismo nivel que ese directorio, para que no esté dentro del directorio. Luego, en el script PHP donde está incluyendo el archivo, simplemente use ("../secure.html"). Eso (../) significa regresar un directorio para encontrar el archivo. Al hacerlo de esta manera, la única forma en que alguien puede acceder al contenido que está en la página (secure.html) es a través del script (secure.php).
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
if($user == "admin"
&& $pass == "admin")
{
include("secure.html");
}
else
{
if(isset($_POST))
{?>
<form method="POST" action="secure.php">
User <input type="text" name="user"></input><br/>
Pass <input type="password" name="pass"></input><br/>
<input type="submit" name="submit" value="Go"></input>
</form>
<?}
}
?>
Una manera simple de hacerlo más seguro: en lugar de almacenar la contraseña, almacene el hash md5. Cuando intenten iniciar sesión, marque 'md5 ($ pass)' contra el hash. Mejor aún, almacene el hash md5 en un archivo fuera de la raíz web pública. –
Tiene razón al almacenar la página protegida fuera de la raíz del documento, porque en su código, cualquiera puede visitar 'secure.html' y omitir el script PHP (a menos que esté usando archivos' .htaccess' o algo así). –
Al igual que willell mencionado, y lo diré de nuevo, no trates esto como un script de contraseña segura de ninguna manera. Solo algo que escribí en uno o dos minutos que parecía que podía encajar en la factura simplemente requiere un pase antes de ver una página. – JacobN
No es la solución, pero para su interés: la autenticación HTTP solo funciona cuando PHP se ejecuta como módulo Apache. La mayoría de los hosters proporcionan PHP solo como versión CGI.
Some easy ways:
Use Apache's digest authorization.
Use lighttpd's digest authorization.
Use php's header digest authorization.
Si lo desea, también puede hacerlo tan sólo ciertas direcciones IP pueden iniciar sesión .. :) muy fácil con lighttpd
Actualización: Voy a publicar algunos ejemplos muy pronto, así que no votar en contra de no hay ejemplos, solo necesito obtener algunos para esta respuesta.
Si desea utilizar las sesiones de los siguientes es el mejor camino a seguir:
# admin.php
session_start();
if(!$_SESSION["AUTH"])
require_once "login.php";
# Do stuff, we are logged in..
# login.php
session_start();
if($_REQUEST["username"] == "user" && $_REQUEST["password"] == "pass")
$_SESSION["AUTH"] = true;
else $_SESSION["AUTH"] = false; # This logs you out if you visit this login script page without login details.
if($_SESSION["AUTH"])
require_once "admin.php";
Este método no contiene los ejemplos de más arriba pero con costura interesado en este método. Los otros ejemplos de métodos están por venir, no tengo suficiente tiempo para obtenerlos para las configuraciones de apache o lighttpd y la autenticación del encabezado php: http://php.net/manual/en/features.http-auth.php.
<?php
$username = "the_username_here";
$password = "the_password_here";
$nonsense = "supercalifragilisticexpialidocious";
if (isset($_COOKIE['PrivatePageLogin'])) {
if ($_COOKIE['PrivatePageLogin'] == md5($password.$nonsense)) {
?>
<!-- LOGGED IN CONTENT HERE -->
<?php
exit;
} else {
echo "Bad Cookie.";
exit;
}
}
if (isset($_GET['p']) && $_GET['p'] == "login") {
if ($_POST['user'] != $username) {
echo "Sorry, that username does not match.";
exit;
} else if ($_POST['keypass'] != $password) {
echo "Sorry, that password does not match.";
exit;
} else if ($_POST['user'] == $username && $_POST['keypass'] == $password) {
setcookie('PrivatePageLogin', md5($_POST['keypass'].$nonsense));
header("Location: $_SERVER[PHP_SELF]");
} else {
echo "Sorry, you could not be logged in at this time.";
}
}
?>
Y el formulario de acceso en la página ...
(En la misma página , justo por debajo de la anterior^Posteado código)
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?p=login" method="post">
<label><input type="text" name="user" id="user" /> Name</label><br />
<label><input type="password" name="keypass" id="keypass" /> Password</label><br />
<input type="submit" id="submit" value="Login" />
</form>
Usar md5 para contraseñas hash es una mala idea. Considere usar [crypt] (http://php.net/crypt) o [password_hash] (http://php.net/password-hash) (en PHP> = 5.5.0) o [password_compat] (https://github.com/ircmaxell/password_compat) (en PHP> = 5.3.7) en su lugar. – Sherif
Esto es un poco tarde pero quería para responder en caso de que alguien más aparezca en esta página y descubrió que la respuesta más alta estaba un poco desajustada. He mejorado un poco el sistema. Tenga en cuenta que todavía no es sorprendentemente seguro, pero es una mejora.
En primer lugar preparar el archivo de sales de contraseña:
hash_generate.php:
<?php
$user = "Username"; // please replace with your user
$pass = "Password"; // please replace with your passwd
// two ; was missing
$useroptions = ['cost' => 8,];
$userhash = password_hash($user, PASSWORD_BCRYPT, $useroptions);
$pwoptions = ['cost' => 8,];
$passhash = password_hash($pass, PASSWORD_BCRYPT, $pwoptions);
echo $userhash;
echo "<br />";
echo $passhash;
?>
Tome la salida $userhash
y $passhash
y los pusieron en dos archivos de texto: user.txt y pass.txt, respectivamente. Otros han sugerido poner estos archivos de texto de distancia por encima de public_html, esto es una buena idea, pero me acaba de utilizar .htaccess y los almacena en una carpeta llamada "cosas"
.htaccess
deny from all
Ahora nadie puede echar un vistazo al hash. El siguiente es el index.php:
index.php:
<?php
$user = ""; //prevent the "no index" error from $_POST
$pass = "";
if (isset($_POST['user'])) { // check for them and set them so
$user = $_POST['user'];
}
if (isset($_POST['pass'])) { // so that they don't return errors
$pass = $_POST['pass'];
}
$useroptions = ['cost' => 8,]; // all up to you
$pwoptions = ['cost' => 8,]; // all up to you
$userhash = password_hash($user, PASSWORD_BCRYPT, $useroptions); // hash entered user
$passhash = password_hash($pass, PASSWORD_BCRYPT, $pwoptions); // hash entered pw
$hasheduser = file_get_contents("stuff/user.txt"); // this is our stored user
$hashedpass = file_get_contents("stuff/pass.txt"); // and our stored password
if ((password_verify($user, $hasheduser)) && (password_verify($pass,$hashedpass))) {
// the password verify is how we actually login here
// the $userhash and $passhash are the hashed user-entered credentials
// password verify now compares our stored user and pw with entered user and pw
include "pass-protected.php";
} else {
// if it was invalid it'll just display the form, if there was never a $_POST
// then it'll also display the form. that's why I set $user to "" instead of a $_POST
// this is the right place for comments, not inside html
?>
<form method="POST" action="index.php">
User <input type="text" name="user"></input><br/>
Pass <input type="password" name="pass"></input><br/>
<input type="submit" name="submit" value="Go"></input>
</form>
<?php
}
yo simplemente buscar una variable $_GET
y redirigir al usuario si no es correcta.
<?php
$pass = $_GET['pass'];
if($pass != 'my-secret-password') {
header('Location: http://www.staggeringbeauty.com/');
}
?>
Ahora bien, si esta página se encuentra en decir: http://example.com/secrets/files.php
Ahora puede acceder a ella con: http://example.com/secrets/files.php?pass=my-secret-password
Tenga en cuenta que esta no es la forma más eficaz o seguro, pero no obstante se trata de una manera fácil y rápida. (Además, sé que mi respuesta es anticuado, pero otra persona mirando esta pregunta puede resultar valioso)
Se puede utilizar esta: http://ps.lixter.com/loginexample.php
<?php
$u=$_GET['usn'];
$p=$_GET['psw'];
$correct=array(
array("admin","password"), //the combine of username and password
array("usn1","12345"),
array("usn2","let-me-in"),
array("abc","pass9210"),
array("20141218","today")
);
for ($x = 0; $x < 5; $x++) { //edit the number of pairs combination
if ($u == $correct[$x][0] && $p == $correct[$x][1]) {
$sta = "you have login successfully! <br>some secret document. some secret document. some secret document.";
break;
} else {
$sta = "you'll have to try another one";
}
}
echo "The username is '<b><u>" . $u . "</u></b>' and the password is '<b><u>" . $p . "</u></b>', so " . $sta . "!!";
?>
<p>
How to get in:
add the following things to the url bar:
?usn=admin&psw=password
or those:
?usn=usn1&psw=12345
?usn=usn2&psw=let-me-in
?usn=abc&psw=pass9210
?usn=20141218&psw=today
</p>
No es una idea muy inteligente colocar una contraseña de texto plano como parámetro GET en una url. Estas URL se registrarán en historiales del navegador, registros de enrutadores, redes wifi abiertas, etc. ... así que realmente cualquiera puede tener acceso a la combinación de usuario/pase sin conocimientos especiales o habilidades de pirateo. – auco
Enlace en la parte superior de con respuesta es virus spam! – StephanieQ
Esto me ha ayudado mucho y me ahorrará mucho tiempo, es fácil de usar y funciona bien, incluso me atrevo a cambiarlo y todavía funciona.
bastante buena si no quieres que perdió mucho tiempo en hacerlo :)
Creo que quería decir esto: http://www.zubrag.com/scripts/password-protect.php en su lugar –
¡Editado! (Ok, ha pasado un tiempo, pero aún lo he hecho: D) –
Se puede usar un simple si con una forma:
if(!(isset($_POST['password'])&&$_POST['password']=="my_pass")){
echo $login_form;
die();
}
Pero hay una gran cantidad de este tipo de scripts en línea: https://www.codester.com/items/705/php-easy-lock-password-protect-php-script
</html>
<head>
<title>Nick Benvenuti</title>
<link rel="icon" href="img/xicon.jpg" type="image/x-icon/">
<link rel="stylesheet" href="CSS/main.css">
<link rel="stylesheet" href="CSS/normalize.css">
<script src="JS/jquery-1.12.0.min.js" type="text/javascript"></script>
</head>
<body>
<div id="phplogger">
<script type="text/javascript">
function tester() {
window.location.href="admin.php";
}
function phpshower() {
document.getElementById("phplogger").classList.toggle('shower');
document.getElementById("phplogger").classList.remove('hider');
}
function phphider() {
document.getElementById("phplogger").classList.toggle('hider');
document.getElementById("phplogger").classList.remove('shower');
}
</script>
<?php
//if "login" variable is filled out, send email
if (isset($_REQUEST['login'])) {
//Login info
$passbox = $_REQUEST['login'];
$password = 'blahblahyoudontneedtoknowmypassword';
//Login
if($passbox == $password) {
//Login response
echo "<script text/javascript> phphider(); </script>";
}
}
?>
<div align="center" margin-top="50px">
<h1>Administrative Access Only</h1>
<h2>Log In:</h2>
<form method="post">
Password: <input name="login" type="text" /><br />
<input type="submit" value="Login" id="submit-button" />
</form>
</div>
</div>
<div align="center">
<p>Welcome to the developers and admins page!</p>
</div>
</body>
</html>
Básicamente lo que hice aquí es hacer una página todo en un archivo php donde cuando ingresas la contraseña, si está a la derecha, ocultará la pantalla de contraseña y traerá las cosas que protegen hacia adelante. y luego está el CSS, que es una parte crucial porque hace que las clases que se esconden y muestran las diferentes partes de la página.
/*PHP CONTENT STARTS HERE*/
.hider {
visibility:hidden;
display:none;
}
.shower {
visibility:visible;
}
#phplogger {
background-color:#333;
color:blue;
position:absolute;
height:100%;
width:100%;
margin:0;
top:0;
bottom:0;
}
/*PHP CONTENT ENDS HERE*/
puede especificar una contraseña en el código php y sólo permitir a los usuarios que tengan la URL secreta:
mywebsite.com/private.php?pass=secret
en su archivo:
<?php
if(isset($_GET["pass"] && $_GET["pass"]=="secret"){
//put your code here
}
else{
echo "you're not allowed to access this page";
}
?>
Aquí está una manera muy simple:
Agregue esto a index.php o similar:
<?php
// Simple password protection
if (!isset($_COOKIE['password']) || $_COOKIE['password'] !== 'MYPASS') {
header('Location: login.php');
exit;
}
?>
continuación, crea un archivo llamado login.php:
<?php
if (isset($_POST['password']) && $_POST['password'] == 'MYPASS') {
setcookie("password", 'MYPASS', strtotime('+30 days'));
header('Location: index.php');
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Password protected</title>
</head>
<body>
<div style="text-align:center;margin-top:50px;">
You must enter the password to view this content.
<form method="POST">
<input type="text" name="password">
</form>
</div>
</body>
</html>
Ejemplo resultado:
Después de llenar la contraseña correcta, el usuario es llevado a index.php. La contraseña se almacena durante 30 días.
PD: No está enfocado para ser seguro, sino para ser práctico. Un hacker puede forzar la fuerza bruta. Úselo para mantener a los usuarios normales alejados. No lo use para proteger información sensible.
- 1. Cómo proteger con contraseña la transmisión de videos con php
- 2. ¿Hay alguna manera de proteger la carpeta con la contraseña?
- 3. Proteger contraseña incrustada
- 4. Apache .htaccess contraseña proteger con ruta relativa
- 5. Contraseña proteger la aplicación de iPhone
- 6. contraseña proteger un archivo PDF
- 7. ¿Cuál es la forma más fácil de proteger con contraseña la base de datos mongodb para usuarios remotos?
- 8. Proteger con contraseña la aplicación web ASP.NET en IIS 7.5
- 9. Detección de OS de manera más fácil con PHP?
- 10. ¿Cuál es la mejor forma de proteger con contraseña la carpeta/página utilizando php sin un db o nombre de usuario
- 11. Cómo hacer condicional .htaccess contraseña proteger
- 12. Cómo proteger contraseñas de base de datos en PHP?
- 13. PHP desglosando la contraseña
- 14. Lighttpd: cómo proteger con contraseña las URL que coinciden con la expresión regular
- 15. La manera más fácil de abrir una página web en Android con un ícono
- 16. En .NET MVC, ¿hay alguna manera fácil de verificar si estoy en la página de inicio?
- 17. Manera fácil de llenar ResultSet con datos
- 18. Manera fácil de AJAX WebControls
- 19. contraseña de htaccess proteger pero no en el host local
- 20. ¿Cómo puedo redireccionar una página php a otra página php?
- 21. ¿La manera más fácil de mostrar la ubicación?
- 22. y contraseña en problema de contraseña - php
- 23. .htaccess proteger el directorio de la contraseña pero permitir los tipos de archivos de imagen
- 24. ¿Cómo puedo proteger una cadena de conexión mySQL en PHP?
- 25. Cómo hacer muy simple la contraseña protegida de ASP.Net Página
- 26. Proteger archivo PHP de acceso directo
- 27. fácil Cifrado y descifrado con PHP
- 28. ¿Cómo puedo proteger el nombre de usuario y la contraseña de MySQL de la descompilación?
- 29. manera fácil de revertir cadena
- 30. Comunicación entre aplicaciones C#: la manera fácil
Definir "no funciona". –
Esto depende de muchas cosas. ¿Es solo una página? ¿Necesita que un visitante se mantenga validado incluso si actualiza la página? ¿Estás dispuesto a usar sesiones? –
Es solo una página, no necesitan permanecer validados. Preferiría no utilizar sesiones, a menos que haya una manera realmente simple de hacerlo sin formularios y tal. –