PHP登录计数器

问题描述 投票:4回答:8

我在保留变量方面遇到问题。我想当您提交表单时,变量将重置为默认值。因此我不知道如何仅在显示“ Go!Away!Hacker!”之前限制3次登录尝试。仅使用php即可。有人知道吗?不必担心安全性,因为这只是我教授给我们做的练习的一个示例,我们只需要单独使用php即可。因此,不必担心黑客会重置Cookie。

注意:我仅使用XAMPP使php在本地主机上工作。

这是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";
}
?>
php variables login counter
8个回答
4
投票

您可以将变量粘贴在会话中,以通过多个页面加载将其保留给用户/客户端计算机。 http://us3.php.net/manual/en/intro.session.php

每次脚本运行时,它都以空白开始。除不可思议的$ _X变量外,所有变量均未定义。您需要将自己的任何数据放置在可以多次运行的位置,例如会话,cookie,数据库,文本文件等。

会话可能是最简单的方法。由于它们具有客户端元素,因此它们并不完全安全。相对老练的用户可以规避会话检查。


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地址,但即使是代理也可以解决。


0
投票

您可以将其存储在$_SESSION中,但是它不可靠,因为他们可以继续重置会话cookie。我建议您使用memcachememcache,具体取决于您运行的哪一个并通过IP地址进行标识。


0
投票

您可以使用会话并将登录信息保存到这些会话。

apc_store

0
投票

将计数器保存在SESSION中,并在每次失败登录时增加其值。.否则,您可以在数据库中创建一个表,并将登录尝试与用户的IP地址保持在一行中。使用第二种方法,您可以根据需要永久阻止某些IP ...

希望这会有所帮助


0
投票

您可能最好通过会话来完成此操作,以实现简单的实现。但是,用户可以通过删除会话cookie轻松终止其会话。实际上,最安全的方法是将所有IP地址的登录请求记录到数据库中,然后如果从给定IP地址获得X个失败请求的次数为Y,则显示安全警告。


0
投票

我个人将使用数据库,以便您可以查看正在发生的事情,而且黑客很难避免这种情况,但是仅使用php,您就可以将登录尝试的次数存储在会话变量中:


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
}
© www.soinside.com 2019 - 2024. All rights reserved.