私のCMSには登録システムがありません。パスワードだけがテーブルの中であらかじめ定義されていることを意味するログインだけです。つまり、ユーザー名とパスワードを設定してログインできます。しかし、そのパスワードは私のテーブルの中に見えます。どうすればそれをハッシュできますか? sha1を使ってそれを行うと、私はログインできません。私は、テーブルに格納されている正確なパスワードでログインしなければなりません。セキュリティ上の問題、PHP/mysql
ここに私のコードです。
<?php
session_start();
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Admin Area</title>
<link rel="stylesheet" href="login-css.css" media="all"/>
</head>
<body>
<div class="login">
<h1>Admin Login</h1>
<form method="post">
<input type="text" name="user_name" placeholder="Username"
required="required" />
<input type="password" name="user_pass" placeholder="Password"
required="required" />
<button type="submit" class="btn btn-primary btn-block btn-large"
name="login">Admin Login</button>
</form>
</div>
<h2 style="color:#FFF; text-align:center"><?php echo
@$_GET['not_authorized']; ?></h2>
</body>
</html>
<?php
include("includes/connect.php");
if(isset($_POST['login'])){
$user_name = mysqli_real_escape_string($con,$_POST['user_name']);
$user_pass = mysqli_real_escape_string($con,$_POST['user_pass']);
$check_user = "select * from user where user_name='$user_name' AND user_password='$user_pass'";
$run_user = mysqli_query($con,$check_user);
if(mysqli_num_rows($run_user)>0){
$_SESSION['user_name'] = $user_name;
echo "<script>window.open('index.php?logged=You have successfully
Logged In','_self')</script>";
}else{
echo "<script>alert('Username or password is incorrect')</script>";
}
}
?>
そして、私のテーブルのSQLコード。
CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) NOT NULL,
`user_password` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
INSERT INTO `user` (`id`, `user_name`, `user_password`) VALUES
(7, 'theo', 'test');
パスワードはテストとして表示しないでください。
アイデア、
ありがとう。
PHPの[パスワード処理のための組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使用してください。 5.5より小さいPHPバージョンを使用している場合、password_hash()[互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。 SQLインジェクションを回避するには、準備された/パラメータ化されたクエリ 'SELECT * FROM user WHERE id =?'も使用する必要があります。あなたの名前でユーザーを選択してから、password_verify()を使用して保存されたハッシュを比較してください。 – JimL
**警告**:あなた自身のアクセスコントロールレイヤーを書くのは簡単ではなく、間違ってしまう機会がたくさんあります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/5.2/authentication)が組み込まれています。絶対に[推奨されるセキュリティのベストプラクティス](http://www.phptherightway.com/#security)に従ってください。決してパスワードをプレーンテキストとして保存しないでください。 – tadman