Diskuze: Zaheslování stránek
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Poslední 3 řádky zapiš takto:
if($heslo==StrasneTajneHeslo){
header('LOCATION: vitejte.html');
}else{
echo 'Heslo je špatně';
}
To co se má vykonat pokud heslo nebude souhlasit (Else), není v závorkách
a ještě tam nemáš středník..
Když někdo napíše cestu k vitejte.html, tak tvoje "ochrana" nemá žádný význam.
Cesta k souboru bude samozřejmě jiná. Na tomto kódu pouze zkouším jestli to funguje. TO NENÍ HOTOVÝ KÓD!
tzn. bude tam něco jako u74839jdjcjgilsngldnvjrkckeipadbgkxhwnfywe.html
A ty myslíš, že se nedá zjistit obsah webového adresáře? Tohle není ochrana. Jen malá překážka na cestě za tím, co chci (v tvém případě přístup na stránku welcome).
A jak mám tedy udělat aby se po splnění podmínky vypsal html kód?
Zaprvé: Používej tlačítko odpovědět. Zadruhé: Pokus se nespamovat
DOUBLE POSTY. Zatřetí: Mysli trochu. Tímhle stylem stránky zabezpečovat
nemůžeš. HTML stránku těžko samu o sobě bez PHP zabezpečíš proti
přístupu. Chce to PHP kód který ti zkontroluje, jestli uživatel přišel ze
stránky s heslem a jestli bylo
heslo správně.
Nebo může dát vitejte.html do nějaké složky, do ní dát .htaccess s omezením přístupu na 127.0.0.1 a potom ho jen includovat - server se k němu dostane, ale uživatel uvidí jen 403.
Ano, možností je spousta. Já bych to řešil třeba takto, jednoduše přes session:
heslo.php
if(isset($_POST['heslo']) AND $_POST['heslo'] != ''){
if($_POST['heslo'] == 'Tvoje tajné heslo'){
session_start();
session_regenerate_id();
$_SESSION['logged'] = true;
header ('LOCATION: tvuj_tajny_soubor.php');
}else{
echo 'Heslo nesouhlasí!';
}
}else{
echo 'Vyplň heslo!';
}
tvuj_tajny_soubor.php
session_start();
if(isset($_SESSION['logged'])){
echo 'Tajný obsah';
}else{
echo '403: Přístup odepřen!';
}
No a když chci vypsat html kód po splnění podmínky... Je na to nějaký příkaz?
echo '<strong>Tučný text</strong>'; //Vypíše tučný text
Toto?
Já bych to udělal takto
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Zadej heslo</title>
</head>
<body>
<p>Pro vstup na stránky zadej heslo</p>
<form method="POST" action="heslo.php">
<input name="heslo" type="password" /><br />
<input type="submit" value="Odeslat"/>
</form>
<?php
if($_POST){
$password = $_POST["password"];
if($password == "SuperTajnéHeslo"){
?>
HTML Stránka po zadání správnéno hesla :)
<?php
}else{
// Přesměrování při zadání špatného hesla
}
}
?>
</body>
</html>
Je to zjednodušené normálně bych to dělal přes SESSION, ale to už máš víše vysvětlené
Tak a mám ještě lepší řešení
<?php
session_start(); // Nastartování SESSION
if(isset($_GET["logout"])){ // Odhlášení při nastaveném logout index.php?logout
unset($_SESSION["logged"]); // Unsetnutí proměné $_SESSION["logged"]
unset($_SESSION["ip"]); // Unsetnutí proměné $_SESSION["ip"]
session_destroy(); // Zničení SESSION
Header("Location: index.php"); // Přesměrování
}
if(isset($_SESSION["logged"])){
if($_SESSION["ip"] != $_SERVER["REMOTE_ADDR"]){ // Slouží jako obrana proti ukradnutí identity pokud ip pod kterou jsi se přihlašoval jse změní tak automatické odhlášení
Header("Location: index.php?logout");
exit;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php
if(!isset($_SESSION["logged"])){ // Pokud je přihlášení vypsání <title> "Super Tajná stránka" a pokud nění <title> Přihlášení
echo "Přihlášení";
}else{
echo "Super Tajná stránka";
}
?></title>
</head>
<body>
<?php
if($_POST){
if(isset($_SESSION["logged"])){ // Pokud je odeslané $_POST a již je přihlášen tak přesměrování
Header("Location: index.php");
exit;
}
$pass = sha1($_POST["password"]); // Zahešování $_POST["password"] pomocí sha1
if($pass == "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8"){ // zahešované slovo "password"
session_regenerate_id(); // Nedokážu přesně popsat, ale slouží jako regenerace PHPSESSID a zárověň jako ochrana proti SESSION INJECTION nebo jak se to přesně jmenuje :)
$_SESSION["logged"] = 1; // Nastavení $_SESSION["logged"] na 1
$_SESSION["ip"] = $_SERVER["REMOTE_ADDR"]; // Nastavení $_SESSION["ip"] na ip přihlášeného
}else{
// Přesměrování při zadání špatného hesla
Header("Location: $error_page"); // $error_page = Nějaká stránka, která se zobrazí při zadání špatného hesla
}
}
if(isset($_SESSION["logged"])){ // Pokud jsi přihlášený (pokud je nestavená $_SESSION["logged"]) zobrazení tajného obsahu
?>
Obsah super tajné stránky
<?php
}else{ // Pokud nejsi přihlášený zobrazení přihlašovacího formuláře
?>
<form action="" method="post">
<table align="center">
<tr>
<td>Zadejte heslo: </td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td style="text-align: right;"><input type="submit" value="Přihlásit se"></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
Díky to stačilo, trošku
to upravím a šupnu na hosting
if(isset($_SESSION
["logged"])){ // Pokud jsi
přihlášený (pokud je nestavená $_
SESSION["logged"]) zobrazení
tajného obsahu
Proč je tam kontrola $_SESSION['logged'] dvakrát?
if(isset($_SESSION['logged']))
Zobrazeno 17 zpráv z 17.