私は自分の.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]
おかげでみんな
ログインできない条件はどれですか? –
あなたの努力にもかかわらず[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)のステートメントについて学んでください。 –
*** [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)を確認するか、他のクレンジングメカニズムを使用してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –