8

セキュリティで保護されたログインが実装されるログイン システムは次のとおりです/

main_login.php

    <form name="form1" method="post" action="checklogin.php">
    Username:<input name="myusername" type="text" id="myusername" /> <br />
    Password:<input name="mypassword" type="password" id="mypassword" />
    <input type="submit" name="Submit" value="Login" />
    </form>

Checklogin.php

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="cosmos"; // Database name 
$tbl_name="members"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

login_success.php

<?php
session_start();

if(isset($_SESSION['username']) && ($_SESSION['username'] == $myusername)){
header("location:main_login.php");
}
?>

<html>
<body>
Login Successful. <a href="logout.php">Logout</a>
</body>
</html>

logout.php

<?php
session_destroy();

header("location:main_login.php");
?>

問題は、パスワード暗号化またはその他の方法 (存在する場合) によってこの安全なログインを行いたいことです。PHP初心者です

4

6 に答える 6

6

md5 でパスワードをある程度暗号化できます。ユーザーがサインアップしてからログイン md5.... する前に、パスワードを md5 する必要があります。

例: // Define $myusername and $mypassword $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; $mypassword = md5($mypassword);

また、ユーザーがサインアップするたびにこれを使用する必要があります。

于 2010-08-28T09:35:30.163 に答える
3

初心者の場合、ほとんどの場合、暗号化は必要ありません。特に、PHP ではなく Javascript になるためです。
それはできますが。
ダイジェスト認証スキーマを実装するハッシュチャレンジを使用できます

  • サーバーがチャレンジを送信 - ランダム ストリング
  • クライアントはこのチャレンジとパスワードのハッシュを作成します
  • このハッシュはサーバーに送信されます
  • サーバーは同じ方法でハッシュを行い、両方を比較します

インターネット上には、Javascript MD5 ハッシュ アルゴリズムの実装が多数あります。

もちろん、SSL 証明書は、この自家製の実装よりも優先されます。

しかし、適切な答えを得るには、何を暗号化し、その理由を明確にする必要があります。そして、何か他のものを確保することを心配してみませんか。たとえば、データベース全体。

しばらくメモ。
あなたの login_success コードは機能せず、何も保護しません。
それはちょうどあるはずです

if(isset($_SESSION['username'])){

比較する $myusername 変数がないためです。
そして 、クライアントはとにかく保護されたコンテンツを取得しexit;ますheader("location:...

于 2010-08-28T09:33:12.377 に答える
2

これをもう少し安全にするために、暗号化されたパスワードをデータベースに保存し、暗号化された入力パスワードを保存されたハッシュと比較する必要があります。このようにして、誰かが何らかの方法で members テーブルにアクセスしても、実際のパスワードを見ることはできません。

パスワードをmyPassword保存するだけでなく、最初に次のようなアルゴリズムを使用してハッシュし、データベースにmd5あるハッシュを保存するとdeb1536f480475f7d593219aa1afd74cします。次に、ユーザーがパスワードを入力すると、それをハッシュし、2 つのハッシュを比較します。

より安全なアプローチについては、SSLを使用してください。

于 2010-08-28T09:24:43.800 に答える
1

サインアップ データをテーブルに挿入するときに、md5($password) または sha1($password) を使用できます。

ログイン ログインの再照合

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='".md5($mypassword)."'"; $result=mysql_query($sql);

さらに保護するために、他の方法もあります。sha1とsaltを組み合わせて使用​​。

ちなみに、これらの小さなものはすでにそれらで構築されているため、簡単なphpフレームワークを使用しないでください。

ありがとう

于 2010-08-28T09:28:18.363 に答える
0

通常、パスワードのハッシュをデータベースに保存します。md5を参照してください。ただし、これではウェブページとサーバーの間で安全になりません。これには https を使用する必要があります。

ここには2つのことがあります。

1. 私が頭の悪いユーザーで、サイトにサインアップするときにパスワードを入力する必要がある場合、他の場所で使用したのと同じパスワードを入力する可能性があるため、サイトは本物のパスワードの代わりにパスワードのハッシュを実際に保存する必要があります。彼らがハッキングされた場合、攻撃者は私がどこでも使用した私のパスワードを取得できません. これを行うには、メンバー テーブルにハッシュを格納し、それが有効であることを確認するクエリで、本物の代わりにハッシュを渡します。

2. http では、パスワードがブラウザからサーバーにプレーン テキストで送信されます。これがインターネット経由であり、攻撃者がブラウザとクライアントの間のネットワークにアクセスできる場合、パスワードを見ることができます.javascriptを使用してブラウザでパスワードをハッシュすると、攻撃者はハッシュを取得し、これを使用してログインできます.あなたのサイト。そのため、https を使用しています。低コストで (特に開発コストと比較して)、接続を保護する証明書を購入できます。これをしたくない場合は、証明書に自己署名してこれを使用できます。ホスティングで証明書の使用が許可されていない場合は、自作ソリューションを作成できる可能性がありますが、他のホスティングを見つける方がはるかに優れています。

于 2010-08-28T09:24:57.927 に答える