Avatar billede thedeathart Nybegynder
30. juni 2004 - 00:32 Der er 3 kommentarer og
2 løsninger

Sende værdier til phpauthuser via en form

Hey

Jeg har lavet et login-system via. PHP_AUTH_USER
men for at passe det ind i et nyt design, vil jeg gerne sende værdier til det via. en form, istedet for den sædvaneligt popup.

Og er det enig sikkert nok at bruge PHP_AUTH_USER ?

[scriptet]

<?php

include('config.php');

function validate_user($username, $password) {
  $username=myaddslash($username);
  $password=myaddslash($password);
  $res = mysql_query("SELECT * FROM brugere WHERE username='$username' AND `password`='$password' LIMIT 1");
  return( mysql_num_rows($res) == 1 );
}

function myaddslash($s){
  return get_magic_quotes_gpc()?$s:addslashes($s);
}
  function authenticate_user()
  {
    $is_logged_in = false;
    if (isset($_SERVER['PHP_AUTH_USER'])) {
      $is_logged_in = validate_user($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
    }
    if (!$is_logged_in) {
      header('WWW-Authenticate: Basic realm="Webers loginsystem"');
      header('HTTP/1.0 401 Unauthorized');
      echo "<br><b><center>INGEN ADGANG UDEN LOGIN !";
      echo "<br><b><center><br> Du indtastede: <br><br>Bruger: ";
      echo $_SERVER['PHP_AUTH_USER'];
      echo "<br><br>Password: ";
      echo $_SERVER['PHP_AUTH_PW'];
      exit;
    }
  }
  authenticate_user();
  header("Location: index.php");

?>
Avatar billede swaxi Nybegynder
30. juni 2004 - 00:40 #1
det kan du ikke. PHP_AUTH_USER læser blot en værdi, som serveren har sat (apache som regel). det er serveren selv, der laver selve autentificeringen, og det sker på protokolniveau.
apaches htaccess er somen sikker nok. det kommer lidt an på hvordan du har konfigureret din server. hvis det er et spørgsmål om liv og død så skal du nok overveje at køre kommunikationen over SSL.
Avatar billede thedeathart Nybegynder
30. juni 2004 - 00:43 #2
svaxi,
dette her script checker om det indtastde brugernavn og password ligger i min mysql-database, og det virker fint nok, endda til flere brugere.

så jeg tænte at man kunne sende værdierne på en anden måde end scriptet gør nu.
Avatar billede swaxi Nybegynder
30. juni 2004 - 14:26 #3
jeps, men værdierne er sat af serveren - ikke php-parseren.

hvis du vil have en form til at sende brugernavn/password kan du ikke bruge PHP_AUTH_*
så skal du istedet lave noget med $_GET / $_POST og gemme det i $_SESSION

altså noget a la :

  function authenticate_user()
  {
    session_start();
    $is_logged_in = false;
    if (isset($_POST['MY_AUTH_USER']) && isset($_POST['MY_AUTH_PW'])) {
      $_SESSION['MY_AUTH_USER'] = $_POST['MY_AUTH_USER'];
      $_SESSION['MY_AUTH_PW'] = $_POST['MY_AUTH_PW'];
    }
    if (isset($_SESSION['MY_AUTH_USER'])) {
      $is_logged_in = validate_user($_SESSION['MY_AUTH_USER'], $_SESSION['MY_AUTH_PW']);
    }
    if (!$is_logged_in) {
      echo "<html>";
      echo "<br><b><center>LOG IN</b></center>";
      echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>";
      echo "<form>";
      echo "user : <input type='text' name='MY_AUTH_USER' /><br />";
      echo "pass : <input type='password' name='MY_AUTH_PW' /><br />";
      echo "<input type='submit' />";
      echo "</form>";
      exit;
    }
  }
Avatar billede thedeathart Nybegynder
30. juni 2004 - 23:27 #4
well. du for points for din indsats, men jeg har tidligere brug sessions til login, og det blev hacket. 

Jeg tænker bare at man kunne bruge en <form> istedet for:

header('WWW-Authenticate: Basic realm="Webers loginsystem"');
header('HTTP/1.0 401 Unauthorized');

Da disse laver pop-up auth'en.
Avatar billede swaxi Nybegynder
01. juli 2004 - 14:33 #5
sessions er i sig selv ikke specielt usikre. det har nok snarere været en anden del af dit script, der har været "svagt". www-authenticate fungerer såddanset på samme måde som sessions.

grunden til, at du ikke kan sende en form, når du anvender www-authenticate, er at det er et header-kald.
normalt sender du html til browseren, men ved at bruge header, sender du så at sige en besked til browseren om at "denne side kan kræver at du giver mig et gyldigt brugernavn + password". browseren opfatter dette, og popper så en loginbox op, hvor den beder brugeren om at skrive sit navn + password.
Eftersom det er browseren selv, der laver selve boksen, har du som programmør ingen kontrol over hvordan den ser ud.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester