4

変数の保持に問題があります。フォームを送信すると、変数がデフォルトにリセットされると思います。そのため、「Go Away! Hacker!」と表示される前にログイン試行を 3 回に制限する方法がわかりません。phpだけを使用するだけで、他には何もありません。誰にも手がかりがありますか?セキュリティについて心配する必要はありません。これは私の教授が私たちに与えた演習の単なる例であり、php だけで実行する必要があるからです。ハッカーが Cookie をリセットする心配はありません。

注: XAMPP を使用して、php を localhost で動作させるだけです。

PHPのコードは次のとおりです。

<center><form action="" method="post"><br>
User ID: <input type="text" name="id"><br>
Password: <input type="password" name="pass"><br>
<input type="submit" name="submit" value="login">
</form>

<?php
if(isset($_POST['submit'])){
    $counter = 0;
    $counter++;
    $vid = 'hanzo';
    $vpass = '123456';
    $id = $_POST['id'];
    $pass = $_POST['pass'];
    $c = "<center>";
    if(empty($id)) echo "$c Please Input Username.<br>";
    else if(empty($pass)) echo "$c Please Input Password.<br>";
    else if($vid==$id && $vpass==$pass) echo "$c Login Succesfully<br>";    
    else if($counter>3) echo "$c Go Away! Hacker!<br>";
    else echo "$c Invalid Username/Password<br> Login Attempt: $counter";
}
?>
4

8 に答える 8

4

セッションに変数を貼り付けて、複数のページの読み込みを通じてユーザー/クライアントマシン用に変数を保持できます。http://us3.php.net/manual/en/intro.session.php

スクリプトを実行するたびに、白紙の状態から始まります。魔法の $_X 変数を除いて、すべての変数は未定義です。セッション、クッキー、データベース、テキストファイルなど、複数の実行を通じて保持される独自のデータをどこかに置く必要があります。

セッションはおそらく最も簡単な方法です。ただし、クライアント側の要素があるため、完全に安全ではありません。比較的熟練したユーザーは、セッション チェックを回避できます。

于 2012-07-17T14:26:55.127 に答える
1

使ってみてください

<input type='hidden' />

断固としたハッカーを防ぐために実際に多くのことをすることはありませんが、特定の嫌悪感がある場合は、セッションを有効にせずにページ間で変数を格納するために使用できます。

そうでなければ

session_start();  
if (isset($_SESSION['loginCount']))
{
   $_SESSION['loginCount']++;
   if ($_SESSION['loginCount'] > 3)
   {
     echo 'Bog Off!';
     exit;
   }
} else {
   $_SESSION['loginCount'] = 1;
}

これはより良い方法ですが、ハッカーがブラウザのキャッシュをクリアすると、セッションがリセットされることに注意してください。最善の策は、データベース内の送信元IPアドレスを追跡することですが、それでもプロキシで回避できます。

于 2012-07-17T14:34:00.973 に答える
0

保存することはできますが$_SESSION、セッション Cookie をリセットし続ける可能性があるため、信頼できません。どちらを実行し、IP アドレスで識別するmemcacheかによって、またはを使用することをお勧めします。apc_store

于 2012-07-17T14:26:35.557 に答える
0

セッションを使用して、ログインをこれらのセッションに保存できます。

if(!isset($_SESSION['logonCounter'])) {
    $_SESSION['LogonCounter'] = 0;
}

if($LogonFail == true) { // do something that check if its correct
    $_SESSION['LogonCounter']++;
}

if($_SESSION['LogonCounter'] < 3) {
    // Do something
}
于 2012-07-17T14:27:48.317 に答える
0

SESSION にカウンターを保存し、ログインが失敗するたびにその値を増やします。それ以外の場合は、データベースにテーブルを作成し、ユーザーの IP アドレスとともにログイン試行を連続して保持できます。2番目の方法では、必要に応じて一部のIPを永久にブロックできます...

お役に立てれば

于 2012-07-17T14:27:52.647 に答える
0

個人的にはデータベースを使用して、何が起こっているかを確認できますが、ハッカーが回避するのは簡単ではありませんが、php だけを使用すると、セッション変数にログイン試行回数を保存できます。

<?php
// only check on posts
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
  session_start();
  $_SESSION['login_attempts'] = isset($_SESSION['login_attempts']) ? ($_SESSION['login_attempts'] + 1) : 0;
  // do checking on number of attempts
  if ($_SESSION['login_attempts'] > 3)
  {
    echo "Go Away! Hacker!";
    die();
    // or just do a redirect to another page...
  }
}
?>
<center><form action="" method="post"><br>
...
于 2012-07-17T14:28:53.300 に答える
0
if(isset($_SESSION['attempts']))
{
    if ($_SESSION['attempts'] == 3){
        echo "Go away!";
    } else {
      $_SESSION['attempts']=$_SESSION['attempts']+1;
    }
}
else
{
  $_SESSION['attempts']=0;
}
于 2012-07-17T14:28:57.933 に答える
0

単純な実装では、おそらくセッションを介してこれを行うのが最善でしょう。ただし、ユーザーはセッション cookie を削除することで簡単にセッションを終了できます。本当に最も安全な方法は、IP アドレスごとにすべてのログイン要求をデータベースに記録し、指定された IP アドレスからの要求が Y 時間以内に X 回失敗した場合にセキュリティ警告を表示することです。

于 2012-07-17T14:29:00.017 に答える