У меня есть страница, которую я хочу защитить паролем. Я попытался выполнить HTTP-аутентификацию, но по какой-то причине она не работает на моем хостинге. Любой другой быстрый (и простой) способ сделать это? Спасибо!
Легкий способ защиты паролем php-страницы
Ответ 1
Не самая надежная защита паролем здесь, поэтому, пожалуйста, не используйте это для защиты номеров кредитных карт или чего-то очень важного.
Просто отбросьте весь следующий код в файл с именем (secure.php), измените пользователя и перейдите от "admin" к тому, что вы хотите. Затем прямо под теми строками, где он говорит include ( "secure.html" ), просто замените это на имя файла, который вы хотите, чтобы он мог видеть.
Они будут получать доступ к этой странице в [YouDomain.com/secure.php], а затем PHP script будет внутренне включать файл, который вы хотите защитить паролем, чтобы они не знали имя этого файла и не могли позже просто войдите в него напрямую, минуя подсказку с паролем.
Если вы хотите добавить дополнительный уровень защиты, я бы рекомендовал вам взять файл (secure.html) за пределами корневой папки вашего сайта [/public_html] и разместить его на том же уровне, что и этот каталог, поэтому что он не находится внутри каталога. Затем в PHP script, где вы включаете файл, просто используйте ( "../secure.html" ). Это (../) означает возврат каталога для поиска файла. Выполняя это так, единственный способ получить доступ к содержимому, которое находится на странице (secure.html) через (secure.php) script.
<?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>
<?}
}
?>
Ответ 2
Это немного поздно, но я хотел ответить, если кто-то еще зашел на эту страницу и обнаружил, что самый высокий ответ был немного не в порядке. Я немного улучшил систему. Обратите внимание, это все еще не удивительно безопасно, но это улучшение.
Сначала подготовьте файл с паролями:
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;
?>
Возьмите выходные данные $userhash
и $passhash
и поместите их в два текстовых файла: user.txt и pass.txt соответственно. Другие предложили поместить эти текстовые файлы выше public_html, это хорошая идея, но я просто использовал .htaccess и сохранил их в папке с именем "stuff"
.htaccess
deny from all
Теперь никто не может заглянуть в хеш. Далее идет ваш 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 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
}
Ответ 3
<?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.";
}
}
?>
И форма входа на страницу...
(На той же странице, прямо под указанным выше кодом)
<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>
Ответ 4
Здесь очень простой способ:
Создайте два файла:
защиты-this.php
<?php
/* Your password */
$password = 'MYPASS';
if (empty($_COOKIE['password']) || $_COOKIE['password'] !== $password) {
// Password not set or incorrect. Send to login.php.
header('Location: login.php');
exit;
}
?>
login.php:
<?php
/* Your password */
$password = 'MYPASS';
/* Redirects here after login */
$redirect_after_login = 'index.php';
/* Will not ask password again for */
$remember_password = strtotime('+30 days'); // 30 days
if (isset($_POST['password']) && $_POST['password'] == $password) {
setcookie("password", $password, $remember_password);
header('Location: ' . $redirect_after_login);
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>
Затем потребуйте protect-this.php в ТОПе файлов, которые вы хотите защитить:
// Password protect this content
require_once('protect-this.php');
Пример результата:
После заполнения правильного пароля пользователь попадает в index.php. Пароль хранится 30 дней.
PS: это не сосредоточено, чтобы быть безопасным, но быть практичным. Хакер может переборщить это. Используйте его, чтобы не пускать обычных пользователей. Не используйте его для защиты конфиденциальной информации.
Ответ 5
Я бы просто искал переменную $_GET
и перенаправил пользователя, если это не правильно.
<?php
$pass = $_GET['pass'];
if($pass != 'my-secret-password') {
header('Location: http://www.staggeringbeauty.com/');
}
?>
Теперь, если эта страница находится по адресу: http://example.com/secrets/files.php
Теперь вы можете получить к нему доступ: http://example.com/secrets/files.php?pass=my-secret-password
Имейте в виду, что это не самый эффективный или безопасный способ, но тем не менее это простой и быстрый способ. (Кроме того, я знаю, что мой ответ устарел, но кто-то другой, смотрящий на этот вопрос, может найти его ценным)
Ответ 6
Some easy ways:
Use Apache digest authorization.
Use lighttpd digest authorization.
Use php header digest authorization.
Если вы хотите, вы также можете сделать так, чтобы только определенные IP-адреса могли войти в систему..:) очень легко с помощью lighttpd
Обновление: скоро опубликую несколько примеров, поэтому не прогоняйте ни одного примера, мне просто нужно немного отбросить этот ответ.
Если вы хотите использовать сеансы, это лучший способ:
# 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";
Этот метод не содержит примеров выше, но вы заинтересованы в этом методе. Другие примеры методов еще впереди, у меня нет достаточно времени, чтобы получить его для параметров apache или lighttpd и заголовка php заголовка: http://php.net/manual/en/features.http-auth.php Будет делать.
Ответ 7
Это очень помогло мне и сэкономило много времени, простота в использовании и хорошо работает, я даже беру на себя риск изменения и все еще работает.
Довольно хорошо, если вы не хотите потерять много времени на этом:)
Ответ 8
</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>
В основном то, что я сделал здесь, - это сделать страницу в одном php файле, где, когда вы вводите пароль, если это правильно, он скроет экран пароля и доставит материал, который защищен вперёд. а затем heres css, который является важной частью, потому что он заставляет классы скрывать и показывать разные части страницы.
/*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*/
Ответ 9
Не решение, но для вашего интереса: HTTP-аутентификация работает только тогда, когда PHP работает как модуль Apache. Большинство хостеров предоставляют PHP только версию CGI.
Ответ 10
Вы можете использовать простой, если с формой:
if(!(isset($_POST['password'])&&$_POST['password']=="my_pass")){
echo $login_form;
die();
}
Но таких скриптов много: https://www.codester.com/items/705/php-easy-lock-password-protect-php-script
Ответ 11
вы можете указать пароль в своем php-коде и разрешить только пользователям, у которых есть секретный URL:
mywebsite.com/private.php?pass=secret
в вашем файле:
<?php
if(isset($_GET["pass"] && $_GET["pass"]=="secret"){
//put your code here
}
else{
echo "you're not allowed to access this page";
}
?>
Ответ 12
Простой способ защитить файл без необходимости отдельной страницы входа - просто добавьте это вверху страницы:
Измените secretuser и secretpassword на вашего пользователя/пароль.
$user = $_POST['user'];
$pass = $_POST['pass'];
if(!($user == "secretuser" && $pass == "secretpassword"))
{
echo '<html><body><form method="POST" action="'.$_SERVER['REQUEST_URI'].'">
Username: <input type="text" name="user"></input><br/>
Password: <input type="password" name="pass"></input><br/>
<input type="submit" name="submit" value="Login"></input>
</form></body></html>';
exit();
}
Ответ 13
Вы можете использовать это: 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>