« 1 2 »
Autor Zpráva
Davestark
Profil
Ahoj,

potřeboval bych udělat přístup na stránku pro vkládání příspěvků jen pár lidem, klidně se stejným heslem.
Tak jsem prohledával toto fórum a našel jsem toto.

Myslím že toto by mi úplně stačilo, ale po zadání hesla mi vždy vyběhne hláška "špatné heslo".
Předem děkuji za radu.


toto mám na hlavní stránce
<?
include "prispevky.html";
?>

form
<form action="publikovat.php">
 <input type="password" name="pwd">
 <input type="text" name="text">
 <input type="submit">
</form>

publikovat.php
<?
if($pwd == "naseheslo"){
 file_put_contents("prispevky.html", $text.file_get_contents("prispevky.html"));
}
else echo "<script>alert('Špatné heslo');</script>";
?>
<script>history.back();</script>
lionel messi
Profil
Davestark:
Namiesto $pwd používaj $_GET["pwd"], pozri tiež: Regsiter globals.

A namiesto HTTP metódy GET by som v tomto prípade volil POST (posielať heslo ako parameter v URL nie je najlepší nápad).
Keeehi
Profil
Davestark:
Na register globals se ani nedívej. Nejlépe zapomeň, že jsi o tom kdy slyšel. Správné řešení je, jak už lionel messi napsal, použití superglobální proměnné $_GET.
Davestark
Profil
Děkuji za rady.
Jestli jsem to alespoň dobře napsal:

<form action="publikovat.php" method="post">
 <input type="password" name="pwd">
 <input type="submit">
</form>

<?
if($_GET["pwd"] == "meheslo"){
 file_put_contents("prispevky.html", $text.file_get_contents("prispevky.html"));
}
else echo "<script>alert('Špatné heslo');</script>";
?>
<script>history.back();</script>

tak to píše pořád Špatné heslo...
Keeehi
Profil
Davestark:
Kde se vzala tu se vzala proměnná $text. Ale jinak ok.
Davestark
Profil
Takže takto by to mělo stačit?

<?
if($_GET["pwd"] == "meheslo"){
 file_put_contents("prispevky.html");
}
else echo "<script>alert('Špatné heslo');</script>";
?>
<script>history.back();</script>


a když to zkouším ve formuláři bez method="post" tak to jde.?
Tomáš123
Profil
Davestark:
a když to zkouším ve formuláři bez method="post" tak to jde.
Ono je totiž metóda GET predvolená, takže vyhovuje skriptu, v ktorom metódu GET používaš. Keď ale uvedieš do HTML formuláru metódu POST, premenné v skripte nájdeš pod $_POST['premenna'], teda vlastne žiadne $_GET['hocico'] neexistuje.

Inak by to malo stačiť, áno.
Marschmallow
Profil
Davestark:
Doporučuji Ti používat klasický dlouhý otevírací tag pro PHP, ty používáš ten krátky (short_open_tag) u kterého je problém, že ho nemusí všude podporovat. Takže používej dlouhé <?php namísto krátkého <?.
Davestark
Profil
Díky
smitka
Profil
Jen otázka, proč nezabezepečit tuto stránku pomocí HTTP autentifikace - pomocí .htaccess a .htpasswd s hesly. Nic se nemusí programovat a rovnou to funguje i pro více uživatelů.

http://radio.feld.cvut.cz/local/web-info/autorizace.html
Davestark
Profil
To vypadá ještě lépe a pro mě jako neználka php i jednodušší.
Ale:

.htpasswd by se měl nacházet mimo oblast www stránek?

A jak určím jaká url bude zaheslovaná?
Marschmallow
Profil
Davestark:
.htpasswd by se měl nacházet mimo oblast www stránek?

Ne to není nutné, klidně v oblasti www stránek, hesla jsou stejně hashovaná.
Tomáš123
Profil
Marschmallow:
hesla jsou stejně hashovaná
Ale z bezpečnostných dôvodov by sa mal súbor aj tak nachádzať aspoň v adresári so znemožneným prístupom.

Davestark:
Prečítaj si o tom tu na diskusii: Zabezpečené prihlásenie
smitka
Profil
Davestark:

Umístění jinde je jen doporučení, slušné hostingy mají zakázáný přímý přístup ke všemu co začíná .ht....

Pokud chceš jen jeden soubor tak to můžeš udělat např. takto:

AuthUserFile cesta/k/.htpasswd
AuthType Basic
AuthName "Zaheslovano"

<Files "pridat-prispevek.php">
  Require valid-user
</Files>

Nebo může být jednodušší prostě ten skript na přidávání příspěvků dát do podsložky a až do ní dát .htaccess vynucující zabezpečení.
Davestark
Profil
Toto téma se spíš mělo jmenovat zabezpečení stránky...

Mám tedy .htaccess a .htpasswd

Napoprvé vyskočilo okno na přihlášení a potom už jen: Internal Server Error
Tomáš123
Profil
Davestark:
Prečítaj si to vlákno [#13]...
Davestark
Profil
Přečteno.
Přesto že jsem po přečtení stále netušil na jaký problém narážíš
tak jsem vše zkusil tak jak je tam na psáno...

a pořád stejná chyba
Tomáš123
Profil
Davestark:
U mňa bola chyba v medzere v ceste... Nemáš náhodou niečo podobné aj ty? Čo ti vypisuje do chybového logu Apache? Ako vyzerá obsah súboru .htaccess?
Davestark
Profil
Já nevím kde je error_log :D
Já to testuji rovnou na serveru...

Ale zatím tam mám toto
a nesměj se. Htaccess se chci naučit, ale teď se věnuji zprovoznění toho formuláře

<?php if($_POST["heslo"] != "mojeheslo"):?>
<? else:  ?>
    <h1>Vítejte v editoru</h1>
     <br>
   
    <form method="post" action="process.php">
    <input type="text" name="nadpis" value="nadpis">
    <input type="date" name="datum" >
    <input type="text" name="name" value="jméno">
    <textarea rows="10" cols="65" name="text">Zde může být text</textarea> 
    <input type="file" name="img" value="obrázek">
    <input type="submit" value="Odeslat">
    </form>
    
<? endif ?>


    <form method="post">
        heslo: <input type="password" name="heslo">
        <input type="submit">
    </form>
Tomáš123
Profil
Davestark:
Prečo vyhodnocuješ podmienku takto?
Prvé dva riadky by šlo nahradiť týmto:
<?php if($_POST["heslo"] = "mojeheslo"):?>
Ak teda nechceš pri neúspechu nič vypísať.

Ak áno, aj tak by som postavil podmienky naopak.
<?php if($_POST["heslo"] = "mojeheslo"):?> /*Ak je heslo zadané do formulára také isté ako heslo, ktoré požaduješ pre vstup...*/
<!--formulár--> /*Vypíšeš formulár na úpravu článkov*/
<?php else:?> /*Inak, teda ak sa heslá nezhodujú...*/
<p>Smola!</p> /*Vypíšeš užívateľovi informáciu, že sa netrafil*/
<?php endif?>
<!--prihlasovací formulár-->

Predpokladám, že teraz potrebuješ skript, ktorý ti spracuje údaje z editora textu...
lionel messi
Profil
Tomáš123:
Nepochybne dobrý postreh, máš pravdu v oboch prípadoch, pozor však na logickú chybu. Operátor = však znamená priradenie, nie porovnanie, čiže potrebné je použiť ==:
<?php if($_POST["heslo"] == "mojeheslo"):?>
Davestark
Profil
Měl jsem to odtud: odkaz

A raději se neptejte proč co dělám nějak složitě,
když to shrnu tak se php učím několik dnů.
Tomáš123
Profil
Davestark:
Takže? Prihlasovanie už funguje?
Davestark
Profil
Ano, ale jenom tím způsobem, že se zadá pouze heslo a když se rovná,
tak to vypíše zbytek stránky, kde je teď ten formulář.
Tomáš123
Profil
Davestark:
Ano, ale jenom tím způsobem, že se zadá pouze heslo a když se rovná, tak to vypíše zbytek stránky, kde je teď ten formulář.
To je princípom overovania užívateľov. Väčšinou sa ale vypíše niečo aj v prípade, že sa užívateľ netrafí. Okomentoval som kód v [#20]. Pozri si to a uprav svoj kód.
Davestark
Profil
Tak už se zase vracím k autorizaci prostřednictvím .htaccess

V .htaccess mám:

AuthType Basic
AuthName "Bez autorizace ani krok!"
AuthUserFile .htpasswd /*Předpokládám, že je ta cesta správně, když jsou oba soubory ve stejné složce*/

<Files "test.php">
  Require valid-user
</Files>

Tomáš123 uvidíme, zdali dojde na to, že juriad chybu najde :)
Davex
Profil
Davestark:
Předpokládám, že je ta cesta správně, když jsou oba soubory ve stejné složce
Předpokládáš chybně. V tématu odkázaném výše píšu, že se relativní cesta k souboru .htpasswd vztahuje k cestě definované v ServerRoot nebo musí být absolutní.
Davestark
Profil
Takže problém je už jenom v cestě?

Jak tu absolutní cestu mám zadat?

Někdo jsem se dočetl, že tento kód ji vypíše.

<?php
$dir = dirname(__FILE__);
echo "<p>Full path to this dir: " . $dir . "</p>";
echo "<p>Full path to a .htpasswd file in this dir: " . $dir . ".htpasswd" . "</p>";
?>
lionel messi
Profil
Davestark:
Miesto dirname(__FILE__) stačí od PHP 5.3 písať __DIR__.
Davestark
Profil
Tak či onak se mi vypíše toto:

Full path to a .htpasswd file in this dir: /var/www/virtual/luka/web/www.htpasswd
« 1 2 »

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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