Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Zaheslování stránek

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

Aktivity (1)
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
Marek Z.
Redaktor
Avatar
Marek Z.: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  +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 Neaktivní uživatel
Jiří Gracík: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  +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
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 Jiří Gracík
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
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Vojtěch Pospíchal
Michal Vašíček: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
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Michal Vašíček: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
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Marek Z.
Redaktor
Avatar
Marek Z.: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
Marek Z.
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Marek Z.: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.