我尝试为我的脚本设计一个save reset-password-page。我走得很远,但现在我需要一些帮助。我已经得到了什么:
现在我对这个脚本的安全性有点怀疑。让我们说攻击者知道邮件,用户类型和用户ID(只有登录的人,但可能知道所有这些)。他现在可以向用户邮件发送密码重置链接。到目前为止没问题。 但他知道现在有一个令牌,可以尝试强制它。为此,他使用已知参数调用第2页或第3页,并尝试每个令牌。
为了防止这种情况,我在第2页放了验证码。
但现在我需要保护第3页/表格。现在我给出令牌并第二次检查它。多数民众赞成并不好,使得1st-captcha毫无用处。给它另一个验证码是可能的,但不是用户友好的。填写第3个表单后检查验证码也不是用户友好的。
那么我怎样才能确保用户在我的脚本中传递了令牌页面(带有验证码)。因此,用户不能仅使用我的第三种形式的输入数据(密码更改形式)发送POST(例如,使用curl)。
提前谢谢你。
第二形式
<form name="confirm" method="GET">
<p>
<label for="confirm">Token
<input type="text" name="confirm" id="confirm_code"
<?php
if(isset($_GET['confirm'])) echo ' value="'.$_GET['confirm'].'"';
?>
></label>
</p>
<p><div class="g-recaptcha" data-sitekey="X" data-callback="checked" data-size="invisible"></div></p>
<p style="text-align:center;">
<input type="submit" value="Proceed">
</p>
<?php
echo '<input type="hidden" name="usertype" value="'.$_GET['usertype'].'">';
echo '<input type="hidden" name="userid" value="'.$_GET['userid'].'">';
echo '</form>';
第三形式
<form name="change" method="post">
<p>
<label for="pw">New pw
<input type="password" name="pw" id="pw"></label>
</p><p><label for="pw_repeat">Repeat
<input type="password" name="pw_r" id="pw_repeat"></label>
</p><p style="text-align:center;">
<input type="hidden" name="usertype" value="<?php echo $_GET['usertype']; ?>">
<input type="hidden" name="userid" value="<?php echo $_GET['userid']; ?>">
<input type="submit" name="change" value="Change now">
</p>
</form>
答案 0 :(得分:0)
嘿,我也是一名正在上手的程序员,我主要从事登录和工作。 以下是我的建议:
如果您可以确保正确遵循上述步骤,那么即使对用户有点不适,您的安全性也会非常好。你觉得怎么样?
干杯, RJ