Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Zaheslování stránek

Aktivity
Avatar
Neaktivní uživatel:18.3.2014 14:17

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
Neaktivní uživatelský účet
Avatar
Uživatel sítě :18.3.2014 15:22

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
18.3.2014 15:22
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:18.3.2014 15:30

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

Nahoru Odpovědět
18.3.2014 15:30
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:18.3.2014 21:53

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:18.3.2014 21:55

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

Nahoru Odpovědět
18.3.2014 21:55
Neaktivní uživatelský účet
Avatar
Vojtěch Pospíchal:18.3.2014 21:58

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
Neaktivní uživatel:18.3.2014 22:06

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
Neaktivní uživatelský účet
Avatar
Vojtěch Pospíchal:18.3.2014 22:41

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

Člen
Avatar
Odpovídá na Vojtěch Pospíchal
:19.3.2014 4:37

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
Avatar

Člen
Avatar
:19.3.2014 5:23

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
Avatar
Uživatel sítě :19.3.2014 7:17

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
Neaktivní uživatel:19.3.2014 15:25

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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Uživatel sítě :19.3.2014 15:50
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):19.3.2014 16:45

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):19.3.2014 17:55

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)
Neaktivní uživatel:21.3.2014 21:35

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
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:22.3.2014 6:49
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
Neaktivní uživatelský účet
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.