2016-04-19 9 views
-1

loginのスクリプトについて多くの例がありましたが、php languageのスクリプトはすべて同じですが、すべての例が違っていました...私はあなたに質問したいと思います。ログインスクリプトを作成する方法、右か左か。この方法で使用するのは安全ですか?ここに私のコードは次のとおりです。ログインしたときにPHPでコンテンツを表示

あなたがindex.phpログインページ:

<!DOCTYPE html> 
<html> 

<head> 
    <title>LOGIN PAGE</title> 
</head> 

<body> 

    <form action="login.php" method="post"> 
    Login: <br> 
    <input name="login" type="text" /><br> 
    Password: <br> 
    <input name="pass" type="text" /><br> 
     <br> 
    <input type="submit" value="Log in!" /> 
    </form> 

</body> 
</html> 

username/passwordが正しいとtrue$_SESSION['logged']を設定した場合、私がチェック2ページ目(それはofcourseのOKなら....) login.php

<?php 
if($_POST['login'] == 'user' && $_POST['pass'] = 'demo'){ 
session_start(); 
$_SESSION['logged'] = true; 
header('Location: loged.php'); 
} else { 
echo "Wrong password or username"; 
} 

?> 

そして最後の一つは、ログイン後のコンテンツを表示することですlogged.php

<?php 
    session_start(); 
    if($_SESSION['logged']){ 
    /* Various things like ADD NEW ITEM to database, delete database record and etc */ 
    echo "Here is your admin panel"; 
    } else { 
    echo "You have to login first"; 
    } 

    ?> 

私の質問は次のとおりです。この方法は正しいですか?ライブで使用するには十分安全ですか?あなたの答えをありがとう!

+3

あなたのコードは現在動作しているようですが、あなたはそれを改善しようとしています。一般的に、これらの質問はこのサイトではあまりにも強烈ですが、[CodeReview.SE](http://codereview.stackexchange.com/tour)でより良い運を見つけるかもしれません。このサイトよりも少し厳密であるため、[必要条件](http://codereview.stackexchange.com/help/on-topic)を必ずお読みください。 –

+0

@ Mr.Llamaうわー、ありがとう。前にそのページを見たことはありません。私はそれを私のお気に入りに追加します... LOL :-)私はこのサイトが大好きなので、ここで答えを得たいと思っています:-)) –

答えて

1

"安全"は相対的な用語ですが、一般的にこのモデルはあまり安全ではありません。あなたがWebページを暗号化するSSL(HTTPS)を使用

  • (これは目に見えない入力した文字を行います)パスワードフィールドのため<input type=password>の代わり<input type=text>を使用

    • 少なくともときに、パスワード、次の場合には、より安全ですが送信されています
    • パスワードをデータベースに直接格納するのではなく、一方向ハッシュを格納します。 SHA1はこのための共通のハッシュですが、MD5は何もないよりも優れています。
  • +0

    これは単なる例です...すべてのパスワードはデータベースに保存されます: )あなたの答えをありがとう! –

    1

    改善:

    • それは非常に上部にsession_start();機能を持っていることは常に良い習慣です。だから私はあなたのコードの順序を変更します。

    • 変更<input type=text>

    • <input type=password>から

    私は、データベースから「ユーザー」と「デモの情報を取得する任意のコードが表示されないので、私はあなたがその点に達していないのいずれかと仮定まだまたはあなたはすでにそのコードをすべて解決しています。

    残りは問題ありません。

    +0

    これは単なる例ですが、パスワードはデータベースに保存されます(MD5を使用)。あなたの答えをありがとう! –

    1

    ユーザーとパスワードの組み合わせが1つしかないことが分かっている場合は、正常に動作します。一般的に言えば、誰かがサーバーファイルシステム上のソースコードにアクセスでき、秘密キーのようなものを取得することができれば、エラー報告や奇妙な構文解析エラーを避けることができます。

    それ以外の場合は、データベースとハッシュ値を使用することをお勧めします。ハードコーディングされたSHA-2、PBKDF2、またはBCryptハッシュを比較するためにコードを変更することもできます。そして、安全にパスワードを設定して、さらに安全にして、ハードコードしておくことができます。

    これはただのハッシュ部分がちょうど現時点では、コードと

    password_hash('demo', PASSWORD_DEFAULT); 
    

    一つの問題によって作成された

    if($_POST['user'] == 'user' && password_verify($_POST['pass'], "$2y$10$3O5QvMNrJpx2QKV8UFieveF/42Pv2itH.wfHBwykXCn5HSVk4DZrm")) { 
    

    が、実際にそれがいずれかを聞かせように見えるということであるように見えますパスワードスルーです。デモのために$ _POST ['pass']を設定してから、条件がそれを返すためです。比較を行うときは、代入演算子の代わりにdouble equals演算子を使用するようにしてください。

    if($_POST['login'] == 'user' && $_POST['pass'] == 'demo'){ 
    
    +0

    うん... '=='の代わりに '='は私のせいでした...私はそれを逃しました:<..そして、もちろん、パスワードはハッシュ値としてデータベースに保存されます。あなたの答えをありがとう! –

    関連する問題