Autor Zpráva
rybarada
Profil
Zdravím, mám problém, udělal jsem editaci jednoho souboru, zahesloval jsem ji, jakmile dám editovaný soubor uložit, opět se zahesluje a nic se neuloží. Nevím, jak to popsat, tak přikládám kód a heslo je nejakeheslo. Poradíte mi? :)

admin/index.php:
<?php
$heslo = "nejakeheslo";

$form = <<< DATA
<form action="#" method="post">
<fieldset>
<label>Heslo:</label> <input type="password" name="heslo" />
<input type="submit" name="vstup" value="Vstoupit" /><br />
</fieldset>
</form>
DATA;

if(isset($_POST['vstup'])) {
if(strtolower($_POST['heslo']) == strtolower($heslo)) {
$over = TRUE;
include("./pass/data.php");
} else {
echo "Nesprávné heslo!".$form;
}
} else {
echo $form;
}
?> 

admin/pass/data.php:
<?php if($over) { ?>

<?php
    if(isset($_POST['send'])) {
        file_put_contents($_POST['file'], $_POST['text']);
    }
    $file = (isset($_POST['file'])) ? $_POST['file']:'hodiny.php';
    file_exists($file) ? '':file_put_contents($file,'');
?>

<html>
    <meta charset="utf-8">
    <form action="" method="post">
        <input type="hidden" name="file" value="<?= $file; ?>"><br>
        <textarea name="text" cols="150" rows="25"><?php echo htmlspecialchars(file_get_contents($file)); ?></textarea>
        <input type="submit" name="send" value="Uložit">
    </form>
    <iframe style="height:400px;width:100%" src="<?= $file; ?>"></iframe>
</html>

<?php ; } else { echo "Neopravneny pristup!"; } ?> 
Alphard
Profil
Nejlepší řešení by bylo vytvořit přihlašování pomocí session (to je standardní způsob).
Jestli to chcete zjednodušit bez session, je třeba nějak vyřešit ten problém, že po odeslání formuláře již není v POST původní heslo. Vidím 3 možnosti:
1. heslo zadat znovu i do druhého formuláře - nejbezpečnější
2. heslo si uložit do hidden inputu - není dobrý nápad ukládat hesla a posílat je zpět klientovi
3. po odeslání druhého formuláře již heslo nekontrolovat - také potenciální díra, útočníkovi stačí zjistit správnou adresu a může dělat cokoliv*.

*tím že umožňujete ukládat libovolný obsah do libovolného souboru dáváte člověku s přístupem k tomuto adminu možnost provádět cokoliv, co je v silách PHP.

Doporučuji buď session, nebo metodu 1. Ty zbylé dvě jsem uvedl jen pro úplnost, nelze je doporučit.
rybarada
Profil
Alphard:
Děkuju za odpověď, jsem pro metodu 1), ale nějak se mi nedáří ji vyřešit, pomůžete mi prosím? :)
Alphard
Profil
Do toho druhého formuláře přidejte
<label>Heslo:</label> <input type="password" name="heslo" />
a místo ověřování $_POST['vstup'] kontrolujte přímo $_POST['heslo'].
rybarada
Profil
Díky moc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: