строка не найдена

Ik heb een pagina die ik wil wachtwoord-beveiliging. Ik heb geprobeerd HTTP-authenticatie te doen, maar om een ​​of andere reden werkt het niet aan mijn hosting. Een andere snelle (en eenvoudige) manier om dit te doen? Bedankt!


Antwoord 1, Autoriteit 100%

Niet precies de meest robuuste wachtwoordbeveiliging hier, dus gebruik dit niet om creditcardnummers of iets heel belangrijks te beschermen.

Laat eenvoudig alle volgende code in een bestand (Secure.php), de gebruiker wijzigen en passeren van “admin” naar wat u maar wilt. Dan rechts onder die regels waar het zegt, zijn onder meer (“Secure.html”), vervang dan gewoon dat u wilt met de bestandsnaam die u wilt zien.

Ze hebben toegang tot deze pagina op [youdomain.com/secure.php] en vervolgens bevat het PHP-script intern het bestand dat u wilt beveiligd met een wachtwoord, zodat ze de naam van dat bestand niet kennen, en niet later alleen Toegang tot het direct omzeilt de wachtwoordprompt.

Als u een verder beschermingsniveau wilt toevoegen, raad ik u aan om uw (Secure.html) -bestand buiten de hoofdmap van uw site [/ public_html] te nemen en op hetzelfde niveau te plaatsen als die map, dus dat het niet in de map is. Dan in het PHP-script waar u het bestand inclusief gebruikt (“../secure.html”). Dat (…/) betekent een map teruggaan om het bestand te vinden. Het op deze manier doen, de enige manier waarop iemand toegang heeft tot de inhoud die op de pagina (Secure.html) staat, is via het 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>
    <?}
}
?>

Antwoord 2, autoriteit 54%

Dit is een beetje laat, maar ik wilde reageren voor het geval iemand anders op deze pagina kwam en ontdekte dat het hoogste antwoord een beetje verkeerd was. Ik heb het systeem een klein beetje verbeterd. Let op, het is nog steeds niet verbazingwekkend veilig, maar het is een verbetering.

Maak eerst uw wachtwoordzoutbestand aan:

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;
 ?>

Neem je output $userhashen $passhashen plaats ze in twee tekstbestanden: respectievelijk user.txt en pass.txt. Anderen hebben voorgesteld om deze tekstbestanden boven public_html te plaatsen, dit is een goed idee, maar ik heb gewoon .htaccess gebruikt en ze opgeslagen in een map met de naam “stuff”

.htaccess

deny from all

Nu kan niemand in de hash kijken. De volgende is uw 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 
} 

Antwoord 3, autoriteit 23%

<?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.";
   }
}
?>

En het inlogformulier op de pagina…
(Op de dezelfde pagina, direct onder de bovenstaande^ geposte 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>

Antwoord 4, autoriteit 21%

Hier is een heel eenvoudige manier. Maak twee bestanden:

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>

Vereisen dan protect-this.phpbovenaan de bestanden die je wilt beschermen:

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

Voorbeeld resultaat:

Na het invullen van het juiste wachtwoord wordt de gebruiker naar index.php geleid. Het wachtwoord wordt 30 dagen bewaard.

PS: Het is niet gericht om veilig te zijn, maar om praktisch te zijn. Een hacker kan dit brute forceren. Gebruik het om normale gebruikers weg te houden. Gebruik het niet om gevoelige informatie te beschermen.


Antwoord 5, autoriteit 8%

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

Als je wilt kun je het ook zo maken dat alleen bepaalde ip-adressen kunnen inloggen.. 🙂 heel gemakkelijk met lighttpd

Update: ik zal binnenkort enkele voorbeelden posten, dus stem niet voor geen voorbeelden, ik moet alleen wat naar beneden halen voor dit antwoord.

Als u sessies wilt gebruiken, kunt u het beste het volgende doen:

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

Deze methode bevat niet de bovenstaande voorbeelden, maar u lijkt geïnteresseerd in deze methode. De andere methode voorbeelden moeten nog komen, ik heb niet genoeg tijd om het te krijgen voor apache of lighttpd instellingen en de php header auth: http://php.net/manual/en/features.http-auth.phpZal doen.


Antwoord 6, autoriteit 8%

Ik zou gewoon zoeken naar een $_GETvariabele en de gebruiker omleiden als deze niet correct is.

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

Als deze pagina zich bevindt op bijvoorbeeld: http://example.com/secrets/files.php

Je hebt er nu toegang toe met: http://example.com/secrets/files.php?pass=my-secret-passwordHoud er rekening mee dat dit niet de meest efficiënte of veilige manier, maar toch is het een gemakkelijke en snelle manier. (Ik weet ook dat mijn antwoord verouderd is, maar iemand anders die naar deze vraag kijkt, kan het waardevol vinden)


Antwoord 7, autoriteit 7%

Dit heeft me veel geholpen en me veel tijd bespaard, het is gemakkelijk te gebruiken en werkt goed, ik heb zelfs het risico genomen om het te veranderen en het werkt nog steeds.

Behoorlijk goed als je er niet te veel tijd aan wilt verliezen 🙂

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


Antwoord 8, autoriteit 5%

Een eenvoudige manier om een bestand te beveiligen zonder dat er een aparte inlogpagina nodig is – voeg dit gewoon toe aan de bovenkant van de pagina:

Wijzig geheimgebruiker en geheimwachtwoord in uw gebruiker/wachtwoord.

$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();
}

Antwoord 9, autoriteit 3%

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

In feite wat ik hier deed is een pagina in één PHP-bestand maken waar wanneer u het wachtwoord invoert als het rechts is, het wachtwoord scherm verbergen en de spullen die voorwaarts worden beschermd. En dan hier de CSS die een cruciaal onderdeel is, omdat het de klassen die de verschillende delen van de pagina verbergen en tonen.

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

Antwoord 10, Autoriteit 3%

u kunt een wachtwoord opgeven in uw php-code en alleen gebruikers toestaan die de geheime url hebben:

mywebsite.com/private.php?pass=secret

in je bestand:

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

Antwoord 11, autoriteit 2%

Niet de oplossing, maar voor uw interesse: HTTP-authenticatie werkt alleen als PHP als Apache-module draait. De meeste hosters bieden PHP alleen als CGI-versie aan.

Other episodes