Легкий способ защиты паролем php-страницы

У меня есть страница, которую я хочу защитить паролем. Я попытался выполнить HTTP-аутентификацию, но по какой-то причине она не работает на моем хостинге. Любой другой быстрый (и простой) способ сделать это? Благодаря!

Не совсем надежная защита паролем здесь, поэтому, пожалуйста, не используйте это, чтобы защитить номера кредитных карт или что-то очень важное.

Просто отбросьте весь следующий код в файл с именем (secure.php), измените пользователя и перейдите от «admin» к тому, что вы хотите. Затем прямо под теми строками, где сказано «Включить» («secure.html»), просто замените это имя файла, которое вы хотите, чтобы они могли видеть.

Они будут получать доступ к этой странице в [YouDomain.com/secure.php], а затем PHP-скрипт будет включать в себя файл, который вы хотите защитить паролем, чтобы они не знали имя этого файла и не могут позже напрямую обращаться к нему в обход подсказки пароля.

Если вы хотите добавить дополнительный уровень защиты, я бы рекомендовал вам взять файл (secure.html) за пределами корневой папки вашего сайта [/ public_html] и разместить его на том же уровне, что и этот каталог, чтобы он был не внутри каталога. Затем в скрипте PHP, где вы включаете файл, просто используйте («../secure.html»). Это (../) означает возврат каталога для поиска файла. Таким образом, единственный способ получить доступ к содержимому, находящемуся на странице (secure.html), через скрипт (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> <?} } ?> 

Это немного поздно, но я хотел ответить в случае, если кто-то еще натолкнулся на эту страницу и обнаружил, что самый высокий ответ был немного выключен. Я немного улучшил систему. Заметьте, это все еще не удивительно безопасно, но это улучшение.

Сначала подготовьте файл солей пароля:

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'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 } 
 <?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> 

Я бы просто искал переменную $_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 Имейте в виду, что это не самый эффективный или безопасный способ, но, тем не менее, это простой и быстрый путь. (Кроме того, я знаю, что мой ответ устарел, но кто-то другой, смотрящий на этот вопрос, может найти его ценным)

 Some easy ways: Use Apache's digest authorization. Use lighttpd's digest authorization. Use php's 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 и auth заголовка php: http://php.net/manual/en/features.http-auth.php Будет делать ,

 </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*/ 

Не решение, но для вашего интереса: HTTP-аутентификация работает только тогда, когда PHP работает как модуль Apache. Большинство хостеров предоставляют PHP только как версию CGI.

Это очень помогло мне и сэкономило много времени, простота в использовании и хорошо работает, я даже беру на себя риск изменения и все еще работает.

Довольно хорошо, если вы не хотите потерять много времени на этом:

http://www.zubrag.com/scripts/password-protect.php

Вы можете использовать простую форму с формой:

 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

вы можете указать пароль в своем 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"; } ?> 

Вот очень простой способ:

Добавьте это в index.php или аналогичный:

 <?php // Simple password protection if (!isset($_COOKIE['password']) || $_COOKIE['password'] !== 'MYPASS') { header('Location: login.php'); exit; } ?> 

Затем создайте файл 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="senha"> </form> </div> </body> </html> 

Пример результата:

защита паролем php

После заполнения правильного пароля пользователь отправляется на index.php. Пароль хранится в течение 30 дней.

PS: Это не сфокусировано на том, чтобы быть безопасным, но быть праведным. Хакер может переборщить это. Используйте его, чтобы убрать нормальных пользователей. Не используйте его для защиты конфиденциальной информации.

Вы можете использовать это: 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>