2016-12-13 6 views
0

私は自分の.htaccessファイルに、自分のサイトの各URLに続く.phpを取り除こうとしています。それは意図どおり、魅力のように.phpを取り出します。しかし、この書き換え条件がログイン機能を壊しています。ログインの壁の中にいったん問題はありませんが、ファイルのいずれかに飛び回ることができますが、なんらかの理由でこの条件でログインできません。私はそれを削除すると、ユーザーはログインすることができます。ログインページ(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..."; 
    } 

    } 

} 
?> 

のための私のPHPファイルをしたい場合は

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] 

おかげでみんな

+0

ログインできない条件はどれですか? –

+1

あなたの努力にもかかわらず[Little Bobby](http://bobby-tables.com/)は*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how -can-i-prevent-sql-injection-in-php)***。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! [MySQLi](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学んでください。 –

+0

*** [SHA1パスワードハッシュ](https://konklone.com/post/why-google-is-hurrying-the-web-to-kill-sha-1)***または* ** [MD5パスワードハッシュ](http://security.stackexchange.com/questions/19906/is-md5-considered-insecure)***そしてPHPの[組み込み関数](http:// jayblanchard.net/proper_password_hashing_with_PHP。html)を使用してパスワードセキュリティを処理します。ハッシュする前に[パスワードを逃さないでください](http://stackoverflow.com/q/36628418/1011527)を確認するか、他のクレンジングメカニズムを使用してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

答えて

0

ルールはあなたの問題を引き起こしているという事実に基づいて、私はよあなたがindexではなくindex.phpに投稿していると推測しています。

これには2つのクイックフィックスがあります。ログインフォームを/indexに変更することができます。次のようなものがあります。

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

アクションには.phpがありません。

# 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] 

/index URLがとにかく/homeのようなもののかわいらしさに欠けるので、このような何かのための私の個人的な好みです。また、あなたの.htaccessファイルに行を追加して、リダイレクトルールからあなたのindex.phpを除外することができあなたはおそらく本当にそれをユーザーに関係なく表示することは決してありません。

以上が必要であることの理由は、あなたのルールがindex.phpに送ら/index.php/indexへのPOSTパラメータをリダイレクトするため、indexへのリダイレクト時に取り除かれることです。これまでに私が見たこの唯一の方法は、307リダイレクトを使用することです。Why doesn't HTTP have POST redirect?

他の回答では、307と誤用される可能性があり、100%有効ではありません。また、多くのブラウザでは、ポストデータの繰り返しを確認するようユーザーに促すため、UXが悪い可能性があります。この修正プログラムを適用するに

あなたはそれがあなたの状況のた​​めに本当に必要ではなく、最初の2つのオプションのように信頼性がないので、私はこのことをお勧めしません。この

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

のようなあなたのhtaccessファイルを変更することができます。

関連する問題