こんにちは、私はmysqliを初めて使いました。質問があります。 mysqliとprepared statementを使用するようにログインチェックを更新しました。しかし、あなたは決して安全ではありません。だから、このコードで何か間違っていることを教えてもらえますか?check loginのヘルプ
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
$mysqli=new mysqli("localhost", "***", "***","***") ;
if(!$mysqli){
die("Database error");
}
function checklogin($username, $password){
global $mysqli;
$result = $mysqli->prepare("SELECT * FROM users WHERE username = ? and password=?");
$result->bind_param("ss", $username, $password);
$result->execute();
if($result != false){
$dbArray=$result->fetch();
if(!$dbArray){
echo '<p class="statusmsg">The username or password you entered is incorrect, or you haven\'t yet activated your account. Please try again.</p><br/><input class="submitButton" type="button" value="Retry" onClick="location.href='."'login.php'\">";
return;
}
$_SESSION['username']=$username;
if(isset($_POST['remember'])){
setcookie("jmuser",$username,time()+60*60*24*356);
setcookie("jmpass",$password ,time()+60*60*24*356);
}
echo'<p class="statusmsg"> You have successfully logged in. You will now be redirected to the homepage.</p>';
redirect();
}
else{
echo'<p class="statusmsg"> The username or password you entered is incorrect. Please try again.</p><br/>input class="submitButton" type="button" value="Retry" onClick="location.href='."'login.php'\">";
return;
}
}
if(isset($_COOKIE['jmuser']) && isset($_COOKIE['jmpass'])){
$status=checkCookie($_COOKIE['jmuser'], $_COOKIE['jmpass']);
if($status==true){
echo '<p class="statusmsg"> Welcome back '.$_COOKIE['jmuser'].'. You will now be redirected to the homepage.</p>';
sleep(5);
redirect();
}
}
else{
if(isset($_POST['sublogin'])){
if((strlen($_POST['user']) >0) && (strlen($_POST['pass']) >0)) {
checklogin($_POST['user'], $_POST['pass']);
}
elseif((isset($_POST['user']) && empty($_POST['user'])) || (isset($_POST['pass']) && empty($_POST['pass']))){
echo '<p class="statusmsg">You didn\'t fill in the required fields.</p><br/><input class="submitButton" type="button" value="Retry" onClick="location.href='."'login.php'\">";
}
}
else{
echo '<p class="statusmsg">You came here by mistake, didn\'t you?</p>';
}
}
また、ログイン時にindex.phpにリダイレクトされないようです。タグのすぐ上に書かれたコードです。
<?php
if(isset($_GET['url'])){
function redirect() {
header('location:'.$_GET['url']);
}
}
else {
function redirect() {
header('location: index.php');
}
}
?>
私は無駄なテキストを削除しようとしました。私は問題を知っていると思う。ログインボタンがクリックされると、私はアドレスバーにこれを表示します:localhost/JMToday/loginchk.php?url =したがって、URLは空白なのでどこにもリダイレクトされません。私の理論が間違っていない限り:Pあなたは助けてくれますか?
なぜですか?ハッシュ値をどのように割り当てることができますか? md5($ password)などを使っていますか? –
そのデータをクッキーに入れることはセキュリティ上のリスクです。ネットワークスニファ(またはブラウザー内のいくつかのJavaScript)をもっている人は、ユーザーのログイン情報を盗むことができます。ハッシュの場合は、md5よりも優れたものが必要です。ユーザー名/パスワードの塩漬けsha1()が良いでしょう。それをユーザーレコードに格納し、それをその後の訪問のキーとして使用します。そうすれば、ユーザーのユーザー名/パスワードを取得することは不可能になりますが、このトークンを盗まれた場合でも攻撃はあなたのサイトに入ります。 –
私はsha1()のようにクッキーを保存するだけでなく、実際のサインアップの詳細も保存しますか? –