Autor | Zpráva | ||
---|---|---|---|
Davestark Profil |
#1 · Zasláno: 7. 2. 2015, 00:00:15
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 |
#3 · Zasláno: 7. 2. 2015, 00:10:51
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 |
#4 · Zasláno: 7. 2. 2015, 00:30:48
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 |
#5 · Zasláno: 7. 2. 2015, 01:21:12
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 |
#9 · Zasláno: 7. 2. 2015, 11:31:41
Díky
|
||
smitka Profil |
#10 · Zasláno: 7. 2. 2015, 12:47:14
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 |
#11 · Zasláno: 7. 2. 2015, 13:24:19
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 |
#12 · Zasláno: 7. 2. 2015, 13:26:20
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 |
#13 · Zasláno: 7. 2. 2015, 13:54:57
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 |
#14 · Zasláno: 7. 2. 2015, 14:07:14
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 |
#15 · Zasláno: 7. 2. 2015, 15:14:30
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 |
#16 · Zasláno: 7. 2. 2015, 15:16:19
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 |
#18 · Zasláno: 7. 2. 2015, 18:05:03
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 |
#19 · Zasláno: 7. 2. 2015, 18:28:10
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 á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 |
#21 · Zasláno: 7. 2. 2015, 18:56:12
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 |
#22 · Zasláno: 7. 2. 2015, 19:02:30
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 |
#23 · Zasláno: 7. 2. 2015, 19:10:15
Davestark:
Takže? Prihlasovanie už funguje? |
||
Davestark Profil |
#24 · Zasláno: 7. 2. 2015, 19:13:15
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 |
#25 · Zasláno: 7. 2. 2015, 19:20:11
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 |
#26 · Zasláno: 8. 2. 2015, 20:10:21
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 |
#27 · Zasláno: 8. 2. 2015, 21:06:24
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 |
#28 · Zasláno: 9. 2. 2015, 09:42:55
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 |
#29 · Zasláno: 9. 2. 2015, 09:49:43
Davestark:
Miesto dirname(__FILE__) stačí od PHP 5.3 písať __DIR__ .
|
||
Davestark Profil |
#30 · Zasláno: 9. 2. 2015, 09:54:39
Tak či onak se mi vypíše toto:
Full path to a .htpasswd file in this dir: /var/www/virtual/luka/web/www.htpasswd
|
||
Téma pokračuje na další straně.
|
0