0

PHPでIRCログボットを作成しようとしています! その多くはすでに機能していますが、ユーザーが作成したパスワードでログを保護したい!

基本的には、ユーザーが !password と入力すると、ランダムなパスワードが取得されます。ウェブポータルにアクセスしたら、そのパスワードでログインする必要があり、ログを確認できます。

私はパスワードジェネレーターを持っていて、すでにセッションのログインスクリプトを持っています

ログイン データベースは次のようになります。

#| id | nick  | Password
------------------------
1| 1  | xvilo | HndOe34
2| 2  | user  | ET4vfd4
3| 3  | boooh | WQ688WY

ログインスクリプトは次のとおりです。

<?php
$pass = $_POST['pass'];

if(isset($pass) )
{

    if( empty($pass) ) {
        die ("ERROR: Please enter password!");
    }


    if( $pass == "somepassword")
    {
        // Authentication successful - Set session
        session_start();
        $_SESSION['auth'] = 1;
        $_SESSION['nick'] = $nick_from_database;
        setcookie("username", $_POST['name'], time()+(84600*30));
        header('Location: '.$_SERVER['PHP_SELF'].'');
    }
    else {
        echo "ERROR: Incorrect username or password!";
    }
}


// If no submission, display login form
else {
?>
    <html>
    <head></head>
    <body>
    <center>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <p />
    Password: <input type="password" name="pass">
    <p />
    <input type="submit" name="submit" value="Log In">
    </center>
    </body>
    </html>
<?php
}
?>

ご覧のとおり、非常に基本的なものです。このコードの前に、すでにデータベースに接続しています! 指定されたパスワード (入力フィールドから) がデータベース内のパスワードの 1 つと同じかどうかを確認する方法がわかりません! もしそうなら、彼に与えてください: $_SESSION['auth'] = 1; 彼はログインしているので、 $_SESSION['nick'] を彼のニックネームにする必要があります (同じ行に保存されます)

私の英語はあまり上手ではないので、皆さんが私が必要としているものを理解してくれることを願っています。より簡単に理解できるように、この例のコードをそのままにしてください。セキュリティは必要ありません!(すべてこのように動作するようになったら修正します)

ページのライブ URL: http://xvilo.com/logs.php

4

3 に答える 3

3
<?php
// Inialize session
session_start();
unset($_SESSION['username']);

if (isset($_POST['logout'])){
  session_start();
  session_destroy();  
}
// Check, if user is already login
if (isset($_SESSION['username'])) {
header('Location: location.php');
}

if(isset($_POST['Submit'])){
  $msg="";

  if(empty($_POST['username'])){
    $msg="Please enter your username. ";
  }

  if(empty($_POST['password'])){
    $msg .="Please enter your password. ";
  }

  if(empty($msg)){
  include('include/databaseconnection.php');
  $un = $_POST['username']; // enter username opt.

        $_SESSION['username'] = $nick_from_database;
        setcookie("username", $_POST['username']);

    $sql = "SELECT username, password FROM `table` WHERE username ='$un'";
    $sql .= "AND password='".md5($_POST['password'])."'";

    if(!$res = mysql_query($sql)){
      $msg.=mysql_error();
    }else{
      //user exists in system, set the session variables
      if (mysql_num_rows($res)==1) {

        while($row = mysql_fetch_assoc($res)){
         // the user name and password match,
          $_SESSION['username'] = $row['username']; 
          $_SESSION['password'] = $_POST['password'];
        }
      }
    else {
        $msg = "Your login details did not match";
      } 
    } 
} 

?>
于 2013-05-07T06:25:02.923 に答える
1

パスワードを確認するには、次のようなクエリを使用します。

SELECT COUNT(*) matches FROM login_db
WHERE nick = ? AND password = ?

プレースホルダーは、ログイン フォームからのユーザー名とハッシュ化されたパスワードに置き換えられます。これが返されmatches = 1た場合はログインが成功し、matches = 0失敗した場合はログインが成功しています。

また、ログイン フォームにユーザー名フィールドがありません。

于 2013-05-07T05:51:48.607 に答える
0

Xvilo、データベース「HndOe34」に保存するために以前に使用したのと同じFUNCTIONを使用して、ユーザーが送信した「somepassword」を変換する必要があります。その後、両方を比較できます。例えば:

...
    $pass_from_user = FUNCTION_USED_BEFORE_TO_CONVERT($pass);

    if( $pass_from_user === $pass_from_db)
    {
...
于 2013-05-07T05:49:55.570 に答える