0

現時点では、非常に基本的な管理者ログイン システムを使用しています。admin_control_panel.php からレコードを更新できる login.php ページのスクリプトを含む admin_login.php ページからログインできます。私の主な懸念は、誰でもこれらの URL をアドレス バーに直接入力して、ログイン手順をバイパスできるという事実です。

現時点では、私のコードはセキュリティに基づいていません (すべての基本的な機能と機能を稼働させようとしているだけです。その後、セキュリティに焦点を当てます)。

ユーザーがログインしているかどうかを追跡するためにセッションを使用する必要があることはわかっていますが、これらのセッションをどこに実装するかについて少し混乱しています。

私の質問は次のとおりです: コードをどのページに含めますか?、ページのどこにこれらのセッションを含めますか? これらのファイルには何を含めますか?

私が望むのは、ユーザーがログインしていない場合に、ユーザーをログインページにリダイレクトできるようにすることです.

admin_login.php

<?php 

$dbhost = 'x';
$dbuser = 'x';
$dbpass = 'x';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $con )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('x');

?>

<html>

<head>
<link rel="stylesheet" type="text/css" href="css/master.css">
</head>

<body>

<form method="post" action="login.php">

User:<input name="username" type="text">
Pass:<input name="password" type="password">

<input name="submit" type="submit" value="Submit">

</form>

</body>

</html>

login.php

<?php

$dbhost = 'x';
$dbuser = 'x';
$dbpass = 'x';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $con )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('x', $con);

$query = "SELECT username FROM members ".
         "WHERE username=\"$_POST[username]\" ".
         "AND password = \"$_POST[password]\"";

$result = mysql_query($query, $con);         

mysql_data_seek($result, 0);

if (mysql_num_rows($result) == 0)
    header("Location: admin_login.php");
 else   
    header("Location: admin_control_panel.php");
?>

admin_control_panel.php

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 3</title>
</head>

<body>

<?php

include('./upload.html');

?>

</body>

</html>

前もって感謝します。

4

2 に答える 2

1

これを行う最善の方法は、 を使用することですsessions。login.php で次のようにします

if (mysql_num_rows($result) == 0) {
    header("Location: admin_login.php");
} else   {
    header("Location: admin_control_panel.php");
    session_start();
    $_SESSION['user'] = $_POST['username'];
}

ファイルの先頭にある admin_control_panel.php に、この php コードを追加して $_SESSION['user'] が存在するかどうかを確認します。

<?php
if (! isset($_SESSION['user'])) {
  header("Location: admin_login.php");
}
?>

基本的に、このコードを使用すると、ログインが正しい場合にユーザー データを使用してセッションを作成します。そうでない場合は、デフォルトでログイン ページにリダイレクトされます。誰かが admin_control_panel ページにアクセスしようとすると、最初にセッションが設定されているかどうかを確認します。true の場合はページにアクセスできますが、そうでない場合はログインにリダイレクトされます。

セッションの詳細については 、 PHP.net セッション マニュアルおよびw3schools.com セッション マニュアルを参照してください。

*ノート。ログアウトするには、関数を使用してセッションを破棄する必要がありsession_destroy();ます。

于 2013-02-17T15:02:18.663 に答える
0

スクリプトの先頭に含めるsession_start();と、次のようになります。

if (mysql_num_rows($result) == 0){
    header("Location: admin_login.php");
} else {
    $_SESSION['permission'] = 'admin';   
    header("Location: admin_control_panel.php");
}

次に、管理者がログインしているかどうかを確認する関数を実装する必要があります。

function verifyAdmin() {
   if(!isset($_SESSION['permission']) || $_SESSION['permission'] != 'admin'){
        header("Location: admin_login.php");
    }
}

次に、各管理ページの上部に を追加しverifyAdmin();ます。session_start();セッションを使用するすべてのページの上部に追加することを忘れないでください。

于 2013-02-17T14:45:56.907 に答える