-1

私は小さなcmsシステムを構築しています。ユーザーはログインして、データベース内のアイテムを編集、削除、または新規作成できます。

私の質問はです。このログインシステムは安全ですか?

<?php 
session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>.....</title>
</head>

<body>
<?php

    include 'koder.inc.php';


if(!isset($_POST['forsoeg'])){
    $forsoeg = 0;
    $check_user='0';
    $check_pass='0';
} else {
    $forsoeg = $_POST['forsoeg'];
    $check_user = $_POST['username'];
    $check_pass = $_POST['password']; }

    if($check_user != $username || $check_pass != $password)     {
        if($forsoeg >3){
            exit("<p>Wrong password or username <br /><br />
            <a href='admin_logon.php'>back to login</a></p>");}


            $forsoeg ++;  

            ?>
<h1>Login</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="form">
  <p>
    <label for="username">username:</label>
    <br />
    <input title="username:" type="text" name="username"  />
  </p>
  <p>
    <label for="password">Password:</label>
    <br />
    <input title="Skriv dit password" type="text" name="password"  />
  </p>
  <p>
    <input class="knap" type="submit" name="Send" value="Login" />
  </p>
  <input type="hidden" name="forsoeg" value="<?php echo $forsoeg; ?>"  />
</form>
<?php

    } else {
        $_SESSION['logon']="ok";

        echo "Login ok..<br />
        <a href='administration.php'>Go to admin page</a>"; } ?>
</body>
</html>

次に、ファイルkoder.inc.phpを含めます

<?php 

 $username = "test";
 $password = "123456";


?> 

そして、有効なユーザーが必要なページでは、ページを開始します

<?php 
session_start(); ?>
4

3 に答える 3

1

ユーザー資格情報がプレーン テキスト ファイルに保存されている場合、非常に安全ではありません。そして、この方法は、今日のシステムでは非常にまれです。ユーザー用のデータベースを使用し、パスワードを md5 などのハッシュ形式で保存することをお勧めします。これは、複数のユーザーがいる場合にも優れています!

于 2012-08-09T10:33:12.550 に答える
1

既に述べた点に加えて、HTML インジェクションの脆弱性 (クロスサイト スクリプティング攻撃につながる) がここにあります。

<form action="<?php echo $_SERVER['PHP_SELF']; ?>"

そしてここ:

<input type="hidden" name="forsoeg" value="<?php echo $forsoeg; ?>"  />

htmlspecialchars()テキスト コンテンツを HTML マークアップに出力するたびに使用する必要があります。例えば:

function h($s) {
    echo htmlspecialchars($s, ENT_QUOTES, 'utf-8');
}

...

<form action="<?php h($_SERVER['PHP_SELF']); ?>" ...
<input type="hidden" name="forsoeg" value="<?php h($forsoeg); ?>"  />
于 2012-08-10T09:22:50.433 に答える
-1

マルチ ユーザー セットアップを行う場合は、プレーン テキスト ファイルから移行し、代わりにデータベースを使用する必要があります。

パスワードをデータベースに保存するには、最初にPBKDF2などを使用してパスワードを暗号化し、次にソルトを追加して、再度暗号化する必要があります。ソルトはランダムである必要があります。これをパスワードとともにプレーンテキストでデータベースに保存しておくと安全です。

ログインを確認するには、データベースからパスワードを取得し、$_POST変数に格納されている暗号化されたパスワードと照合します。

于 2012-08-09T10:36:50.037 に答える