限制登录尝试失败的次数

2023-12-02

我想限制失败的登录尝试。例如,如果特定用户尝试使用错误的用户名或密码登录 4 次,我应该第四次显示验证码,而不是阻止一段特定时间,并继续显示验证码,除非他提供有效的用户名和密码。用户成功登录后,登录尝试将重置为零。

从安全角度来看,检查用户名而不是 IP 地址的想法可行吗?这种方法可以在不使用数据库的情况下实现吗?因为我认为我不需要存储时间,因为我只会显示 recaptcha? 请发表您的意见。


您不想使用数据库来检查“登录失败次数”吗?然后只需使用 cookie 并检查它即可。当然,他们可以删除它,但这很麻烦。

However,我怀疑您已经从数据库中获取了用户名和密码,为什么不同时获取最后一次失败登录的次数呢?

if (isset($_POST['submit_login'])) {

    if (isset($_POST['username']) && isset($_POST['password'])) {
        $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string($_POST['password']);
        // id = unique primary key
        $rs = mysql_query('SELECT id,Username,Password,Failed_logins,IP_address FROM Users WHERE Username = '.$username.'');
        $num = mysql_num_rows($rs);
        if ($num > 0) {
            // I would add a password hash here to $password, and check against the hashed Password from the database
            // But let's check the clean passwords
            $row = mysql_fetch_array($rs);
            if ($password == $row['Password']) {
                // Successful login, set session or whatever you need
                // Reset failed logins
                mysql_query('UPDATE Users SET Failed_logins = 0 WHERE id = '.$row['id'].'');
                header('location: success.php');
            } else {
                // Failed password check
                if ($row['Failed_logins'] > 3) {
                    // Redirect to captcha
                    header('location: captcha.php');
                } else {
                    $ip = $_SERVER['REMOTE_ADDR'];
                    if ($row['IP_address'] != $ip) {
                        // New ip adress, reset failed logins
                        $failed_logins = 0;
                    } else {
                        // Increment failed logins
                        $failed_logins = $row['Failed_logins']+1;
                    }
                    mysql_query('UPDATE Users SET Failed_logins = '.$failed_logins.',IP_address = '.$ip.' WHERE id = '.$row['id'].' ');
                } // End check Failed_logins > 3
            }
        } else {
            // No such Username found in database
            $error = 'no_such_username';
        } // End username check from database

    } else {
        // Either username or password is missing
        $error = 'incomplete_form';
    } // end check for username and password

} // end main submit_login check

类似的事情。

EDIT:

这是非常旧的代码,我现在发现它有一些问题。但是,至少您应该始终使用 PDO(准备好的语句)在数据库中插入数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制登录尝试失败的次数 的相关文章

  • 如何使用 Facebook SDK API 为页面/网址“点赞”?

    我正在使用这段代码 facebook gt api me likes post array url gt http www google com 我收到以下错误 Fatal error Uncaught OAuthException 200
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • fgetcsv 在特定行打开?

    有没有办法使用 fgetcsv 在特定行上打开 我有一个非常大的 csv 想通过 ajax 一次运行大约 100 行 我可以轻松停止 while 循环 但如何在特定行上打开 或者这是不可能的 从第 100 行开始读取没有简单的方法 但您可以
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • 是否可以在非交互模式下运行 WSL Bash?

    人们可能想在任务计划程序中使用 Windows 上的 Bash 或作为版本控制挂钩脚本 可以或者支持吗 如果没有 为什么 这是一个错误还是防止某些问题的措施 使用 3d1t0r的解决方案 但也可以通过管道连接到cat wsl bash c
  • Opencart 中的支付网关集成

    我想将 CitrusPay 印度支付网关 集成到我的 opencart 应用程序中 我收到了 PHP 集成工具包 但不知道在 opencart 中从哪里开始 请告诉我如何添加 Citruspay 作为付款方式 您可以编辑和修改这些文件 va
  • 虚拟主机的路由前缀如下

    我有一个 Symfony 应用程序 它有 2 个包 一个公共包 可通过 URL public blahblah test 调用 和一个 API 包 可通过 URL api getIt 调用 我创建了 2 个带有 2 个虚拟主机的子域 一个用
  • Visual Studio 项目属性中的各种“生成操作”设置是什么以及它们的作用是什么?

    在大多数情况下 您只需将 Visual Studio 设置为默认值即可 我指的是构建动作在解决方案资源管理器中选择的每个文件的属性 有多种选择 很难知道其中每一种会做什么 None 该文件不包含在项目输出组中 并且不会在构建过程中进行编译
  • 根据用户权限隐藏中继器列

    有人可以向我解释如何根据用户权限隐藏转发器列 假设我有
  • StringBuffer equals方法是否比较内容? [复制]

    这个问题在这里已经有答案了 可能的重复 将 StringBuffer 内容与 equals 进行比较 StringBuffer s1 new StringBuffer Test StringBuffer s2 new StringBuffe
  • 帮助将字符串日期转换为日期时间

    我在带有提交按钮的文本框中使用 Ajax 控件工具包日历扩展器 简单的 调试器显示文本已正确传输到调用方法 但是这行转换代码将文本框文本转换为 1 1 0001 12 00 00 AM 文本框日期是这样的 4 15 2011 DateTim
  • 检测 UIWebview 中的滑动手势

    我是新来的iPhone开发商 我制作了 epub 阅读器并将 epub 的每一页加载到我的webview 我想要的是 当用户这样做时right swipe gesture第二次我想导航到新页面 当用户这样做时我不想做任何事情right sw
  • 自动将 LF 和 CR (EOL) 添加到多个 .csv 文件的末尾

    我有一堆 csv外部生成并定期发送给我的文件 它们各自包含一行文本和 31 个 列 然而 他们都没有任何形式的EOL 没有 LF 本身或与 CR 一起使用 因此当我尝试组合这些文件中的任何一个时 我会在同一行上获得更多列 而不是每个文件一行
  • Perforce 到 git 的迁移 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我需要将存储库从 perforce 迁移到 git 以及所有历史记录 我尝试在网络上搜索 但没有找到任何明确的文档详细提及每个步骤 我看到了一个名为 git p4 的实用程序 但
  • Android 版 Google 登录

    我尝试了谷歌开发人员文档并尝试登录我的应用程序 该代码是从 git 复制的 并添加了来自文档 并定义在登录活动 as Public class LoginActivity extends AppCompatActivity implemen
  • 当服务器发送的事件运行时,带有 session_start() 的页面不会加载

    我正在开发一个小项目来制作 1v1 聊天系统 我想做一个项目 我可以把Server Sent Events好好利用 它运行得很好 但最近我对代码进行了一些更改 以便总的来说聊天会更有效 当我运行事件源时 我遇到了一个奇怪的问题 当我尝试访问
  • 使用Glide无法刷新验证码图片

    我尝试使用 Glide 将验证码图像加载到 ImageView 中 第一次加载没问题 但是 当我将验证码图像重新加载到同一个 ImageView 中时 ImageView 不会刷新到新图像 有谁知道如何解决这个问题 String url h
  • 如何向 Amazon Alexa Skills Kit (ASK) 混合字符串和数字输入?

    我正在尝试创建一个 Amazon Alexa 技能套件来进行某种自动化 这需要接受由字符串和数字组成的语音输入 a test12fish 当我在 Alexa Skills Kit 中使用自定义插槽时 它不允许我键入带有数字的字符串 当我尝试
  • 如何创建极坐标等值线图

    Update 我已经在我的博客上完整地写了我发现的方法http blog rtwilson com having polar contour plots with matplotlib 你可能想先检查一下 我正在尝试在 matplotlib
  • 将对象数组转换为长数组时出现 ClassCastException

    当我尝试将对象数组转换为长数组时 出现此异常 线程 main 中的异常 java lang ClassCastException Ljava lang Object 无法投射到 Ljava lang Long 我的酒店房间地图中的钥匙很长
  • 如何使用 ViewPager 滑动 xml 布局

    我正在构建一个应用程序 我想在其中启用滑动功能 我想在单个活动中滑动 xml 布局 早些时候我尝试放置图像 它成功了 我创建了一个扩展 PagerAdapter 的 ImageAdapter 类 在 instantiateItem 中 我创
  • 用于相对导入的 python 包装

    首先 我很抱歉 我知道有很多关于相对导入的问题 但我只是没有找到解决方案 如果可能的话我想使用以下目录布局 myClass init py test demo py benchmark py specs py src init py myC
  • 写入文件需要针对大流量进行优化第 3 部分

    这个问题是前2部分的延续 任何有兴趣了解我来自哪里的人都可以参考第1部分和第2部分 但这不是必要的 写入文件需要针对大流量进行优化 写入文件需要针对大流量进行优化第 2 部分 现在我有一个工作片段 相关部分如下 public static
  • 限制登录尝试失败的次数

    我想限制失败的登录尝试 例如 如果特定用户尝试使用错误的用户名或密码登录 4 次 我应该第四次显示验证码 而不是阻止一段特定时间 并继续显示验证码 除非他提供有效的用户名和密码 用户成功登录后 登录尝试将重置为零 从安全角度来看 检查用户名