Diskuze: Zaheslování stránek

PHP PHP Zaheslování stránek American English version English version

Avatar
Lukáš Tesař:

Ahoj, chtěl bych poradit s jedním problémem. Chci zaheslovat svoje stránky aby se k nim dostal jen někdo. Problém je v tom že mi po zadání špatného hesla vypíše PHP tuto chybu: Parse error: syntax error, unexpected 'else' (T_ELSE) in /home/users/Lu­ky/mojedomena­.cz/web/heslo­.php on line 12;, jenže else mám podle mě zařazené správně. Kde je tedy chyba?

Obsah souboru index.php:

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

Obsah souboru heslo.php:

<?php
mb_internal_encoding("UTF-8");
if (isset($_POST['heslo'])&& $_POST['heslo'])
{
$hlaska = '';
$heslo = $_POST['heslo'];
}
else
{$hlaska = 'Heslo není vyplněno!';}
if ($heslo==StrasneTajneHeslo)
      header ('Location:vitejte.html'); exit;
else
echo ('Heslo je špatně')
?>
<html>
<head>
<meta http-equiv="Content Type"
content="text/html;
charset=UTF-8">
<title>5A</title>
</head>
<body>
</body>
</html>

Děkuji předem za odpověď :)

Editováno 18.3.2014 14:19
 
Odpovědět 18.3.2014 14:17
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

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.. :)

Editováno 18.3.2014 15:23
Nahoru Odpovědět  +1 18.3.2014 15:22
Chybami se člověk učí, běžte se učit jinam!
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Lukáš Tesař
Jiří Gracík:

Když někdo napíše cestu k vitejte.html, tak tvoje "ochrana" nemá žádný význam.

Nahoru Odpovědět  +2 18.3.2014 15:30
Creating websites is awesome till you see the result in another browser ...
Avatar
Odpovídá na Jiří Gracík
Lukáš Tesař:

Cesta k souboru bude samozřejmě jiná. Na tomto kódu pouze zkouším jestli to funguje. TO NENÍ HOTOVÝ KÓD!

 
Nahoru Odpovědět 18.3.2014 21:53
Avatar
Odpovídá na Jiří Gracík
Lukáš Tesař:

tzn. bude tam něco jako u74839jdjcjgil­sngldnvjrkcke­ipadbgkxhwnfy­we.html

 
Nahoru Odpovědět 18.3.2014 21:55
Avatar
Vojtěch Pospíchal:

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).

 
Nahoru Odpovědět 18.3.2014 21:58
Avatar
Lukáš Tesař:

A jak mám tedy udělat aby se po splnění podmínky vypsal html kód?

 
Nahoru Odpovědět 18.3.2014 22:06
Avatar
Vojtěch Pospíchal:

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ě.

 
Nahoru Odpovědět 18.3.2014 22:41
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Vojtěch Pospíchal
Michal Vašíček:

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.

Nahoru Odpovědět 19.3.2014 4:37
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Michal Vašíček:

A ještě jedna věc, toto

if ($heslo==StrasneTajneHeslo)

změn na

if ($heslo=="StrasneTajneHeslo")
;)
Nahoru Odpovědět 19.3.2014 5:23
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.:

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_sou­bor.php

session_start();

if(isset($_SESSION['logged'])){
    echo 'Tajný obsah';
}else{
    echo '403: Přístup odepřen!';
}
Nahoru Odpovědět 19.3.2014 7:17
Chybami se člověk učí, běžte se učit jinam!
Avatar
Lukáš Tesař:

No a když chci vypsat html kód po splnění podmínky... Je na to nějaký příkaz?

 
Nahoru Odpovědět 19.3.2014 15:25
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Lukáš Tesař
Marek Z.:
echo '<strong>Tučný text</strong>'; //Vypíše tučný text

Toto?

Nahoru Odpovědět 19.3.2014 15:50
Chybami se člověk učí, běžte se učit jinam!
Avatar
Rudolf Macek (riot):

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é

Editováno 19.3.2014 16:46
 
Nahoru Odpovědět 19.3.2014 16:45
Avatar
Rudolf Macek (riot):

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>
 
Nahoru Odpovědět 19.3.2014 17:55
Avatar
Odpovídá na Rudolf Macek (riot)
Lukáš Tesař:

Díky :) to stačilo, trošku to upravím a šupnu na hosting :)

Editováno 21.3.2014 21:37
 
Nahoru Odpovědět 21.3.2014 21:35
Avatar
Lukáš Tesař:
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']))
 
Nahoru Odpovědět 22.3.2014 6:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.