Przepisz Stan nie pozwalając Użytkownik Login

głosy
0

Więc mam to w moim pliku .htaccess, próbując pozbyć się z .php po każdej URL na moim miejscu. I to działa, tylko zgodnie z przeznaczeniem, to bierze .php się, podobnie jak czar. Jednak warunek ten przepisać łamie moje funkcjonalność logowania. Raz wewnątrz ściany logowania, nie ma problemu, mogę wiać wokół jednego z plików, ale z jakiegoś powodu, nie mogę się zalogować z tego warunku w miejscu. Jak tylko go usunąć, użytkownicy mogą zalogować.

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

W przypadku, gdy chcesz mój plik PHP do strony logowania (index.php)

<?php
 ob_start();
 session_start();
 require_once 'dbconnect.php';

 // it will never let you open index(login) page if session is set
 if ( isset($_SESSION['User'])!= ) {
  header(Location: home.php);
  exit;
 }

 $error = false;

 if( isset($_POST['btn-login']) ) { 

  // old source code with no relevance
  $email = trim($_POST['email']);
  $email = strip_tags($email);
  $email = htmlspecialchars($email);

  $pass = trim($_POST['pass']);
  $pass = strip_tags($pass);
  $pass = htmlspecialchars($pass);

  if(empty($email)){
   $error = true;
   $emailError = Please enter your email address.;
  } else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
   $error = true;
   $emailError = Please enter valid email address.;
  }

  if(empty($pass)){
   $error = true;
   $passError = Please enter your password.;
  }

  // if there's no error, continue to login
  if (!$error) {


  $conn = new mysqli($servername, $username, $dbpassword, $dbname);

   $password = hash('sha256', $pass); // password hashing using SHA256 do not use, it's not secure

   $sql = SELECT UserID, FirstName, Password FROM Users WHERE Email='$email';
   $result = $conn->query($sql);
   $row = $result->fetch_assoc();
   $count = $result->num_rows;

   if( $count == 1 && $row['Password']==$password ) {
    $_SESSION['User'] = $row['UserID'];
    header(Location: home.php);
   } else {
    $errMSG = Incorrect Credentials, Try again...;
   }

  }

 }
?>

Dzięki chłopaki

Utwórz 13/12/2016 o 15:00
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Opierając się na fakcie, że reguła jest przyczyną problemu, zgaduję że Piszesz do index.phpraczej niż index, więcej o tym, dlaczego to jest poniżej problem.

Istnieją 2 szybkie poprawki dla tego produktu. Można zmienić formę zalogować, żeby móc się /index. Coś jak:

<form method="post" action="/path/to/index">

Uwaga zaginionych .phpw akcji. Alternatywnie, można wykluczyć swój index.php od reguł przekierowania przez dodanie odpowiedniego wiersza do .htaccesspliku:

# To externally redirect /dir/foo.php to /dir/foo
RewriteRule ^index\.php$ - [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=307,L,NC]

To jest moje osobiste preferencje na coś takiego ponieważ /indexURL brakuje prettiness czegoś podobnego /hometak więc nigdy chyba naprawdę chcesz zobaczyć, że dla użytkowników niezależnie.

Dlatego, że powyższe jest to konieczne jest to, że ponieważ reguła przekieruje /index.phpdo /indexwszelkich POSTparametrów przesłanych index.phpzostaną usunięte podczas przekierowania do index. Jedynym sposobem obejścia tego, jakie kiedykolwiek widziałem jest użycie 307przekierowania: Dlaczego nie mają HTTP POST przekierowania?

Jako druga odpowiedź mówi, istnieje możliwość nadużycia z 307 i to nie jest w 100% skuteczne. Istnieje również możliwość złej UX od wielu przeglądarek (i powinien) poprosi użytkownika o potwierdzenie powtórzenia danych pocztowych.

Aby zastosować tę poprawkę, można zmodyfikować tak htaccess

RewriteRule ^ %1 [R=307,L,NC]

Nie polecam tego, ponieważ nie jest to naprawdę konieczne w danej sytuacji i nie jest tak wiarygodne, jak pierwsze 2 opcji.

Odpowiedział 13/12/2016 o 17:10
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more