Hej,
Har en fråga till er experter. Jag har en hemsida där jag har tänkt göra åtkomsten av en specifik fil lösenordsskyddad. För att hålla det relativt enkelt är det inte supernödvändigt att sökvägen till filen hålls hemlig på webbhotellet efter att användaren angivit rätt lösenord. Det är mer tänkt som en enklare skydd för obehöriga.
Jag provade först med följande lösning som jag hittade här
där jag satte en enkel scriptfunktion som öppnade en ny tab till den angivna filen efter det att användaren angivit rätt lösenord. Detta fungerade utmärkt på min Apache server men inte på webbhotellet (one.com). Problemet på one.com är att den inte vill skicka mig vidare till den angivna filen utan istället uppdaterar sidan och tvingar mig att ange lösenordet igen.
Jag har lite erfarenhet av PHP sedan tidigare så om någon vill skicka mig i rätt riktning så ska jag nog kunna lösa resten själv. Tack.
Har en fråga till er experter. Jag har en hemsida där jag har tänkt göra åtkomsten av en specifik fil lösenordsskyddad. För att hålla det relativt enkelt är det inte supernödvändigt att sökvägen till filen hålls hemlig på webbhotellet efter att användaren angivit rätt lösenord. Det är mer tänkt som en enklare skydd för obehöriga.
Jag provade först med följande lösning som jag hittade här
Kod:
<?php $realm = 'Restricted area'; //user => password $users = array('admin' => 'mypass', 'guest' => 'guest'); if (empty($_SERVER['PHP_AUTH_DIGEST'])) { header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Digest realm="'.$realm. '",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"'); die('Text to send if user hits Cancel button'); } // analyze the PHP_AUTH_DIGEST variable if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || !isset($users[$data['username']])) die('Wrong Credentials!'); // generate the valid response $A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]); $A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']); $valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2); if ($data['response'] != $valid_response) die('Wrong Credentials!'); // ok, valid username & password echo 'You are logged in as: ' . $data['username']; // function to parse the http auth header function http_digest_parse($txt) { // protect against missing data $needed_parts = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 'username'=>1, 'uri'=>1, 'response'=>1); $data = array(); $keys = implode('|', array_keys($needed_parts)); preg_match_all('@(' . $keys . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', $txt, $matches, PREG_SET_ORDER); foreach ($matches as $m) { $data[$m[1]] = $m[3] ? $m[3] : $m[4]; unset($needed_parts[$m[1]]); } return $needed_parts ? false : $data; } ?>
där jag satte en enkel scriptfunktion som öppnade en ny tab till den angivna filen efter det att användaren angivit rätt lösenord. Detta fungerade utmärkt på min Apache server men inte på webbhotellet (one.com). Problemet på one.com är att den inte vill skicka mig vidare till den angivna filen utan istället uppdaterar sidan och tvingar mig att ange lösenordet igen.
Jag har lite erfarenhet av PHP sedan tidigare så om någon vill skicka mig i rätt riktning så ska jag nog kunna lösa resten själv. Tack.
__________________
Senast redigerad av ArzeniX 2016-10-07 kl. 09:50.
Senast redigerad av ArzeniX 2016-10-07 kl. 09:50.