Asensin tässä pari päivää sitten XP:lle Apache 2 serverin ja siihen PHP 4. Kopsasin mun toiselta sivulta salasana suojauksen PHP (aika heikko, mutta hyvä). Mutta sitten kun laitoin sen mun palvelimelle niin se ei suostunut toimimaan vaan väitti että olis väärä käyttäjä ja salasana, mutta se kyllä toimi sillä mu toisella sivulla hyvin http://www.info.tampere.fi/~ypymseko/login.php
Käyttäjä: Testi
Salasana: test
***salasana.php <?php $username = $_GET["user"]; $pass = $_GET["pass"]; if ($pass == md5("test") && $user == "Testi"); else header("Location: virhe.html"); ?>
***login.php <?php if (isset($_POST["user"]) && isset($_POST["pass"])) { header("Location: salainensivu.php?user=".$_POST["user"]. "&pass=". md5($_POST["pass"])); } ?> <html> <head> <title>Kirjautuminen</title> </head> <br> <center><form method="post" action="login.php"> <b>User:</b> <input name="user" type="text"><br> <b>Pass:</b> <input name="pass" type="password"><br> <br> <input type="submit" value="Login"> </form></center> </html>
***salainensivu.php <?php include("salasana.php"); ?> <html> <head> <title>Salainen sivu</title> </head> <body> Tämä sivu on vain harvoille valituillle ihmisille </body> </html>
Olisiko siinä mun koodis jotain vikaa vai mun serverissä?
Kannattaisi nyt ensinnäkin ottaa huomioon, että tuo ei oikeasti suojaa mitään. Tuohan siis ilmeisesti asettaa itse salatulle sivulle location-headerin, joka komentaa käyttäjän selainta menemään muualle. Selaimenhan ei luonnollisesti mikään pakko totella tätä käskyä, jolloin sivu jää näkyviin normaalisti.
Varsinainen virhe löytyy salasana.php:stä. Vertaat muuttujaa $user, vaikka sitä ei koskaan ole edes määritetty. Tarkoittanet tuolla muuttujalla siis $username:a, jonka oletkin määrittänyt.
KeKimmon mainitsemaan ongelmaan auttaa, että headerin jälkeen tulee exit;
MasaVista kirjoitti:
Varsinainen virhe löytyy salasana.php:stä. Vertaat muuttujaa $user, vaikka sitä ei koskaan ole edes määritetty.
Ja tämä ei haitannut vanhalla servulla todennäköisimmin sen takia, että siellä oli register_globals asetettu päälle. Täten tuo $user
tarkoitti samaa kuin $_GET["user"]
.
Aihe on jo aika vanha, joten et voi enää vastata siihen.