我有保留变量的问题。我想当你提交表格时,变量将被重置为默认值。所以我不知道如何在“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";
}
?>
答案 0 :(得分:4)
您可以在会话中粘贴变量,以便通过多个页面加载为用户/客户端计算机保留这些变量。 http://us3.php.net/manual/en/intro.session.php
每次脚本运行时,它都以空白平板开始。除了魔术$ _X变量之外,所有变量都是未定义的。您需要将自己的任何数据放在可以持续多次运行的地方 - 会话,cookie,数据库,文本文件等。
会话可能是最简单的方法。由于它们具有客户端元素,因此它们并不完全安全。相对复杂的用户可以规避会话检查。
答案 1 :(得分: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地址,但即便如此,也可以使用代理进行处理。
答案 2 :(得分:0)
答案 3 :(得分: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
}
答案 4 :(得分:0)
将计数器保存在SESSION中并在每次登录失败时递增其值。否则,您可以在数据库中创建一个表,并将登录尝试连同用户的IP地址一起保留。使用第二种方法,如果需要,可以永久阻止某些ip ...
希望这有帮助
答案 5 :(得分: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>
...
答案 6 :(得分:0)
if(isset($_SESSION['attempts']))
{
if $_SESSION['attempts'] == 3{
echo "Go away!";
} else {
$_SESSION['attempts']=$_SESSION['attempts']+1;
}
}
else
{
$_SESSION['attempts']=0;
}
答案 7 :(得分:0)
通过简单实施的会话,您最好能够做到这一点。但是,用户可以通过删除会话cookie轻松终止其会话。真正最安全的方法是将所有登录请求按IP地址记录到数据库,然后在没有来自给定IP地址的X次失败请求时显示安全警告。