it-swarm.com.de

Einfache Möglichkeit, die PHP-Seite mit einem Kennwort zu schützen

Ich habe eine Seite, die ich mit einem Passwort schützen möchte. Ich habe versucht, die HTTP-Authentifizierung durchzuführen, aber aus irgendeinem Grund funktioniert es bei meinem Hosting nicht. Gibt es einen anderen schnellen (und einfachen) Weg, dies zu tun? Vielen Dank!

32
Leticia Meyer

Nicht gerade der robusteste Passwortschutz hier, verwenden Sie diesen bitte nicht, um Kreditkartennummern oder etwas sehr Wichtiges zu schützen.

Legen Sie einfach den folgenden Code in eine Datei namens (secure.php) ab, ändern Sie den Benutzer und übergeben Sie "admin" an das, was Sie möchten. Dann direkt unter den Zeilen, in denen Include ("secure.html") steht, ersetzen Sie einfach den Dateinamen durch den Dateinamen, den Sie anzeigen möchten.

Sie werden auf diese Seite unter [YouDomain.com/secure.php] zugreifen und das Skript PHP enthält intern die Datei, die durch ein Kennwort geschützt werden soll, damit sie den Namen dieser Datei nicht kennen und später nicht mehr können Greifen Sie einfach direkt auf das Kennwort zu und drücken Sie die Eingabeaufforderung.

Wenn Sie eine weitere Schutzstufe hinzufügen möchten, würde ich empfehlen, dass Sie Ihre (secure.html) -Datei außerhalb des Stammordners [/ public_html] Ihrer Site ablegen und sie auf derselben Ebene wie dieses Verzeichnis platzieren nicht im Verzeichnis Dann verwenden Sie im Skript PHP, in das Sie die Datei einfügen, einfach ("../secure.html"). (../) bedeutet, dass Sie in einem Verzeichnis nach der Datei suchen. Auf diese Weise kann jemand nur über das (secure.php) -Skript auf die Inhalte der (sicheren.html) -Seite zugreifen.

<?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>
    <?}
}
?>
49
JacobN

Dies ist etwas spät, aber ich wollte antworten, falls jemand anderes auf diese Seite stößt und herausfand, dass die höchste Antwort etwas abgelehnt war. Ich habe das System nur ein bisschen verbessert. Beachten Sie, es ist immer noch nicht erstaunlich sicher, aber es ist eine Verbesserung.

Bereiten Sie zuerst Ihre Passwort-Salzdatei vor:

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;

 ?>

Nehmen Sie Ihre Ausgabe $userhash und $passhash in zwei Textdateien: user.txt und pass.txt. Andere haben vorgeschlagen, diese Textdateien über public_html zu setzen. Dies ist eine gute Idee, aber ich habe gerade .htaccess verwendet und in einem Ordner mit dem Namen "stuff" gespeichert.

.htaccess

 deny from all

Jetzt kann niemand mehr in den Hash schauen. Als nächstes ist Ihre 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 
} 
23
Juan
<?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.";
   }
}
?>

Und das Anmeldeformular auf der Seite ...
(Auf der gleichen Seite , direkt unter dem oben genannten ^ gebuchten Code)

<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>
13
Mafia

Hier ist ein sehr einfacher Weg:

Erstellen Sie zwei Dateien:

protect-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>

Dann fordern Sie protect-this.php im TOP der Dateien an, die Sie schützen möchten:

// Password protect this content
require_once('protect-this.php');

Beispielergebnis:

 password protect php

Nachdem Sie das richtige Kennwort eingegeben haben, wird der Benutzer zur index.php weitergeleitet. Das Passwort wird 30 Tage gespeichert.

PS: Es ist nicht darauf ausgerichtet, sicher zu sein, sondern um praktisch zu sein. Ein Hacker kann dies brutal erzwingen. Verwenden Sie es, um normale Benutzer fernzuhalten. Verwenden Sie es nicht zum Schutz vertraulicher Informationen.

7

Ich würde einfach nach einer $_GET-Variablen suchen und den Benutzer umleiten, wenn er nicht korrekt ist.

<?php
$pass = $_GET['pass'];
if($pass != 'my-secret-password') {
  header('Location: http://www.staggeringbeauty.com/');
}
?>

Wenn sich diese Seite jetzt befindet, sagen Sie: http://example.com/secrets/files.php

Sie können jetzt auf Folgendes zugreifen: http://example.com/secrets/files.php?pass=my-secret-password Beachten Sie, dass dies nicht der effizienteste oder sicherste Weg ist, aber es ist ein einfacher und schneller Weg. (Außerdem weiß ich, dass meine Antwort veraltet ist, aber jemand anderes, der diese Frage betrachtet, kann sie für wertvoll halten.)

6
Singularity
Some easy ways:
Use Apache's digest authorization.
Use lighttpd's digest authorization.
Use php's header digest authorization.

Wenn du willst, kannst du es auch so machen, dass sich nur bestimmte IP-Adressen anmelden können .. :) mit lighttpd wirklich einfach

Update: Ich werde in Kürze einige Beispiele veröffentlichen, also stimmen Sie nicht für keine Beispiele ab, ich brauche nur ein paar Hinweise für diese Antwort.

Wenn Sie Sitzungen verwenden möchten, ist der folgende Weg der beste Weg:

# 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";

Diese Methode enthält nicht die oben genannten Beispiele, aber Sie waren an dieser Methode interessiert. Die anderen Methodenbeispiele stehen noch aus, ich habe nicht genug Zeit, um sie für Apache- oder lighttpd-Einstellungen und den PHP-Header auth: http://php.net/manual/de/features.http-auth.php zu bekommen Wird besorgt.

4
JamesM-SiteGen
</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>

Grundsätzlich habe ich hier eine Seite in einer einzigen PHP-Datei erstellt. Wenn Sie das Passwort eingeben, wird der Passwort-Bildschirm ausgeblendet und der geschützte Inhalt wird angezeigt. und dann ist hier das CSS, das ein entscheidender Teil ist, weil es die Klassen macht, die die verschiedenen Teile der Seite verstecken und anzeigen.

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

Das hat mir sehr geholfen und mir viel Zeit gespart. Es ist einfach zu bedienen und funktioniert gut. Ich habe sogar das Risiko einer Änderung in Kauf genommen und es funktioniert immer noch.

Ziemlich gut, wenn Sie nicht zu viel Zeit damit verlieren wollen :)

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

2
Baldráni

Nicht die Lösung, aber aus Interesse. Die HTTP-Authentifizierung funktioniert nur, wenn PHP als Apache-Modul ausgeführt wird. Die meisten Hoster bieten PHP nur als CGI-Version an.

1
Busydude

sie können ein Kennwort in Ihrem PHP-Code angeben und nur Benutzern mit der geheimen URL erlauben:

mywebsite.com/private.php?pass=secret

in Ihrer Datei:

<?php
     if(isset($_GET["pass"] && $_GET["pass"]=="secret"){
           //put your code here
     }
     else{
           echo "you're not allowed to access this page";
     }
?>
1
mondersky

Eine einfache Möglichkeit, eine Datei zu schützen, ohne dass eine separate Anmeldeseite erforderlich ist - fügen Sie dies einfach oben auf der Seite hinzu:

Ändern Sie secretuser und secretpassword in Ihren Benutzer/Ihr Passwort.

$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();
}
0
A.Badger