2

私のサイトを攻撃している攻撃者はほとんど見たことがありません.1人のユーザーから、login page. ユーザーは何度でもログインを試みることができます。これを防ぐ方法と、そのために何を使用しているか知りたいですか? だから私は自分のサイトを試してみることができます。そして良い解決策を教えてください。

言語を使用していますphp

HTML

<form action="login.php" method="post">
    <div class="row">
        <span id="other-info-font" class="label">Username:<br />or email:</span>
    <span class="formw"><input type="text" name="username" value="<?php echo $username; ?>" size="25" /></span>
    </div>
    <div class="row">
        <span id="other-info-font" class="label">Password:</span>
    <span class="formw"><input type="password" name="password" value="<?php echo $password; ?>" size="25" /></span>
   </div>
    <div class="lo-button">
         <input class="white" type="submit" value="Login" name="submit-login" />
    </div>                      
</form>

PHP

require_once 'include/global.php';

$error = "";
$username = "";
$password = "";


//check to see if they've submitted the login form
if(isset($_POST['submit-login'])) { 

    $username = $_POST['username'];
    $password = $_POST['password'];

    $LoginTool = new Tools();
    if($LoginTool->login($username, $password)){
        //successful login, redirect them to a page
        header("Location: index.php");
    }else{
        $error = "Incorrect username or password. Please try again.";
    }
}
4

1 に答える 1

1

最初にできることは、「ダミー」のログイン入力フィールドを作成してから、実際のユーザー名/パスワード フィールドの名前をあまり期待しない名前に変更することです。ログイン ロジックは、変数の新しい名前を参照します。

2 番目にできることは、ログイン失敗時の遅延を実装することです。攻撃者は、試行に時間がかかっていることに気付き、ページを更新するだけで済みます。

考慮すべき 3 番目のことは、IP ブラックリスト テーブルの作成です。実はこれについては以前にも質問したことがありますが、要約すると、ログイン試行にすぐに失敗する IP アドレスからのログイン試行を自動的に拒否することを目的としています。

コードは次のようになります。

require_once 'include/global.php';

$error = "";
$username = "";
$password = "";

//check to see if they've submitted the login form
if(isset($_POST['submit-login']) 
       && isset($_POST['emanresu']) 
       && strlen($_POST['emanresu']) > 0)
{
    $username = $_POST['emanresu'];
    $password = $_POST['drowssap'];

    $LoginTool = new Tools();
    if($LoginTool->login($username, $password))
    {
        //successful login, redirect them to a page
        sleep(1);
        header("Location: index.php");
        exit();
    }
    else
    {
        sleep(4);
        $error = "Incorrect username or password. Please try again.";
    }
}
else if(isset($_POST['username']) && strlen($_POST['username']) > 0)
{
    // Either autocomplete filled in a username in the wrong place or 
    //   a tool automatically scanned for 'username' and filled it in.
    //   In either case, sleep for four seconds.
    sleep(4);
    $error = "Sorry, there was a problem with the login attempt. Please try again.";
}

...

<form action="login.php" method="post">
    <div style="display:none"><input type="text" name="username" /><input type="text" name="password" /></div>
    <div class="row">
        <span id="other-info-font" class="label">Username:<br />or email:</span>
    <span class="formw"><input type="text" name="emanresu" value="" size="25" /></span>
    </div>
    <div class="row">
        <span id="other-info-font" class="label">Password:</span>
    <span class="formw"><input type="password" name="drowssap" value="" size="25" /></span>
   </div>
    <div class="lo-button">
         <input class="white" type="submit" value="Login" name="submit-login" />
    </div>
</form>
于 2013-06-10T03:33:54.473 に答える