私は全く新しいPHP
とmySQL
を新しく使用していて、自分のウェブサイト用の小さなログインフォームを作成しました。このようなことについてのインターネット上の記述がはるかに広範であるため、これは安全な方法であるかどうかを尋ねたいのですが、それはほんの数行で、動作します:PHPとmySQLのログインセキュリティに疑問がある
まず、テーブルはphpMyAdmin
で、ユーザー名とパスワード(ハッシュされたmd5)。その後、次のスクリプトでウェブサイトのログインを実行します。ここでは$_POST
はフォームから来ます。
<?php
session_start();
$db = @mysqli_connect("...", "...", "...") or
die("Connection failed!");
mysqli_select_db($db,'...');
if(isset($_POST['username']))
{
$_SESSION['user'] = $_POST['username'];
$_SESSION['password'] = md5($_POST['password']);
$user = $_SESSION['user'];
$password = $_SESSION['password'];
$sql = "SELECT * FROM logins WHERE username = \"$user\"";
$result = $db->query($sql);
$row = $result->fetch_assoc();
if($row["password"] == $password)
{
$_SESSION['logged'] = "loggedin";
}
}
?>
ログアウトスクリプトも非常に簡単です。
<?php
session_start();
session_destroy();
unset($_SESSION['user']);
unset($_SESSION['password']);
header('Location: ../index.php');
?>
また私は
<?php
if (isset($_SESSION['logged']))
{
$temp = $_SESSION["user"];
echo "Hello $temp, nice to see you!";
}
?>
またはIリダイレクトを行うと、すべてのプライベートコンテンツを制限。
だからここに私の質問は以下のとおりです。
- が、これはそれを行うための安全な方法ですか?簡単にハッキングできますか?
- reverse lookupが可能な場合、md5はどのような意味を持っていますか?
ありがとうございます!
[コードレビュー](http://codereview.stackexchange.com/)には最初の質問がおそらく適しています –
[MD5パスワードハッシュ](http://security.stackexchange。あなたは本当にPHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使ってパスワードセキュリティを扱うべきです。ハッシュする前に[パスワードを逃さないでください](http://stackoverflow.com/q/36628418/1011527)、または他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –
[Little Bobby](http://bobby-tables.com/)は[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php)[MySQLi](http://php.net/manual/en/mysqli.quickstart)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学んでください。 .prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –