OpenWrt系统安全改进<三> --- Web UI密码错误控制

2023-11-02

OpenWrt系统安全改进<二>中所做的尝试,是为了增强用户登录的鉴权机制(密码输错三次就禁用用户一段时间),PAM可以实现对用户登录的控制,但是进一步操作中发现WebUI的登录并没有支持PAM,前功尽弃......
了解了一下OpenWrt的luci机制,参见http://www.360doc.com/content/14/0312/20/1964482_360072189.shtml,简单来说,就是使用uhttpd来解析http报文,一些具体的操作都由lua来实现。
本来是想修改uhttpd来实现这个功能,但是抓包看了一下,uhttpd并不关心luc程序的操作结果,虽然能够识别到用户登录,但是要获取密码认证结果却并不方便,于是只好硬着头皮上lua。
 
下面是最基本的实现,多用户,信息安全都没有考虑,以后可以改进一下。
另外,密码输错三次后,用户继续输入,返回在web页面的信息还是密码错误而不是用户被限制,也需要修改。

 

FORBIDEN_EXPIRE = 180
MAX_TRY = 3

local UserErrorCount = 0
local UserForbidenTime = 0

function writeErrCount(username,count)
    os.execute("echo %s > /var/ErrCount" % count)
end

function readErrCount(username)
	if fs.access("/var/ErrCount") then
		return (tonumber(fs.readfile("/var/ErrCount")))
	else 
		return 0
	end
end

function writeForbidenTime(username,ftime)
    os.execute("echo %s > /var/ForbidenTime" % ftime)
end

function readForbidenTime(username)
	if fs.access("/var/ForbidenTime") then
		return (tonumber(fs.readfile("/var/ForbidenTime")))
	else 
		return 0
	end
end

function fnsrDbg(string)
	os.execute("echo %s >> /luaDbg" % string)
end

function isForbidenExpired(username)
	curTime = uptime()
	UserForbidenTime = readForbidenTime(username)

	if curTime - UserForbidenTime > FORBIDEN_EXPIRE then
		fnsrDbg("Forbiden Expired")
		return true
	else
		fnsrDbg("Forbiden Not Expired")
		return false
	end

end

function isAllowed(username)
	if readForbidenTime(username) == 0 then
		fnsrDbg("UserAllowed")
		return true
	else
		if isForbidenExpired(username) then
			writeForbidenTime(username,0)
			fnsrDbg("UserAllowed After ForbidenExpired")
			return true
		end
	end

	fnsrDbg("User Not Allowed")
	return false
end

function updateAllowed(username,validate)
	if validate then
		writeErrCount(username,0)
	else
		UserErrorCount = readErrCount(username)
		UserErrorCount = UserErrorCount + 1
		writeErrCount(username,UserErrorCount)

		if UserErrorCount == MAX_TRY then
			UserAllowed = false
			writeErrCount(username,0)
			writeForbidenTime(username,uptime())
		end
	end
end

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

OpenWrt系统安全改进<三> --- Web UI密码错误控制 的相关文章

  • 克隆一个lua状态

    最近 我在使用C 和Lua进行开发时遇到了很多困难 我的情况是 由于某种原因 我的 C 程序中可能有数千个 Lua 状态 但这些状态在初始化后应该是相同的 当然 我可以为每个状态执行 luaL loadlibs 和 lua loadfile
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • 使用哪个 HTTP 状态代码来拒绝由于乐观锁定失败而导致的 PUT

    假设我想实现某种乐观锁定并使用 ETag 来指示最新的资源状态 这意味着 客户将使用If Match标题时PUT等待更新 根据HTTP规范 http www w3 org Protocols rfc2616 rfc2616 sec14 ht
  • 在 Lua/LuaFileSystem 中创建一个新文件

    我已经查看了 Lua 和 LuaFileSystem 文档 但尚未找到创建新文件的方法 我也在这里四处寻找 但目的相同 请注意 我正在寻找的解决方案必须与操作系统无关 以确保可移植性 但我很高兴针对不同的系统获得不同的答案 示例 将 Hel
  • 如何使用 Torch7 进行预测

    我仍在熟悉 Torch 到目前为止一切顺利 然而 我遇到了一个死胡同 我不知道如何解决 如何让 Torch7 或更具体地说 dp 库 来评估单个输入并返回预测输出 这是我的设置 基本上是 dp 演示 require dp hyperpara
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下
  • 构建自动化和 MySQL Workbench 脚本:正向工程师 SQL CREATE SCRIPT

    我目前正在研究自动化软件构建过程 其中包括 MySQL Workbench 中定义的数据库架构 使用 Workbench 的脚本编写功能 我想打开一个 Workbench 文档并将其架构导出为 SQL CREATE 脚本 我想知道是否有一个
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除
  • 为什么 RFC 6797 禁止通过纯 HTTP 响应发送 Strict-Transport-Security 标头?

    在阅读 HSTS 严格传输安全 规范时 我看到了一条禁令第 7 2 节 https www rfc editor org rfc rfc6797 section 7 2禁止在通过 http 而不是 https 访问时发送标头 HSTS 主机
  • 缺少带有 {:locale=>[:en], :formats=>[:html], 的模板布局/邮件程序

    我正在关注 Michael harlt Rails 教程 但出现此错误 缺少带有 locale gt en formats gt html variants gt handlers gt raw erb html builder 的模板布局
  • 比例背景图像

    我想放大和缩小页面中的背景图像 我尝试过多种方法 但似乎没有一种方法能按照我想要的方式工作 我的页面的网址是http quaaoutlodge com drupal 7 14 http quaaoutlodge com drupal 7 1
  • 包括文件、覆盖变量

    我试图通过在代码末尾要求第二个来覆盖第一个 lua 文件中的变量 文件1 lua val 1 require file2 文件2 lua val 2 不幸的是 这似乎不起作用 因为此后 val 仍然是 1 我想出的解决方案是一个新函数 允许
  • 我需要对 Metatable.__index 进行澄清

    我之前问过为什么 Lua 没有找到我的元表方法 并被告知通过设置 index到我的元表 它会解决问题 所以我假设调用时的方法是按元表中的索引搜索的 但现在我遇到了一个问题 我需要使用索引括号 and 在我的元表上 所以 index被分配从其
  • 如何检查端口当前是否在代码隐藏中与 IIS7(网站)一起使用?

    我开发了一个程序 安装程序 它将在 IIS 上添加和配置新网站 我的问题是我想在安装之前检查用户提供的端口是否已被另一个站点使用 我的项目是C WinForm风格的 有人你有想法吗 string lPorts System IO Ports
  • 如何从网络解决方案中间和域证书文件为 Azure 网站创建 PFX 证书导出?

    我从 Network Solutions 网站购买了 SSL 证书 我收到了 4 个 crt 文件 我相信其中三个是中间证书 第四个是我的网站域名的实际证书 我尝试使用 DigiCert 实用程序导入实际证书 它在三个中间文件上出错 它允许
  • 如何重新安装cudnn?

    安装Cudnn 4 0 4后 我发现如果我想运行我下载的代码 我需要更高版本的Cudnn 然后我下载 cudnn 7 0 linux x64 v4 0 prod tgz 并直接按以下顺序安装 sudo cp include cudnn h
  • Lua userdata数组访问及方法

    我正在用 C 编写一个用户数据类型 以便在 Lua 中使用 它有一些数组类型的属性和各种方法 现在如果你是这种类型 我使用u set k v resp u get k 访问数据 例如u sort 作为方法 为此我设置了 index到包含这些
  • AWS SNS 参数电话号码无效

    我正在尝试学习 aws sns 服务从我的网络应用程序发送短信 我正在本地主机上工作 params array credentials gt array key gt iam key secret gt iam secret region
  • lua找不到模块插座

    我正在尝试使用 lua 从 nginx 访问 redis 值 当我在命令行上执行 lua 文件时 一切正常 我可以读取值并将值写入 redis 但是当我尝试通过访问写入 access by lua 指令的位置来从 nginx 执行相同的文件
  • 在javascript中将.wav文件转换为.ogg

    我正在尝试从浏览器捕获用户的音频输入 我已经用WAV 完成了 但是文件很大 我的一个朋友告诉我 OGG 文件要小得多 有谁知道如何将WAV转换为OGG 我也有原始数据缓冲区 我真的不需要转换 但我只需要 OGG 编码器 这是来自的 WAV

随机推荐

  • R语言学习:数据结构7-数据框

    数据框 data frame 主要是用来存储 表格数据tabular data的 可以将数据框视为各元素长度相同的 列表 具体为 每个元素代表一列数据 每个元素的长度代表行数 元素类型可以不同 创建数据框 data frame df lt
  • 模拟html post表单提交

    一 打开自动提交访问 设置好表单账号密码 然后访问指定地址 就能自动提交登录并跳转到首页 1 填写访问表单信息 设置好表单账号密码
  • (Design Patterns)设计模式的重要性

    设计模式使人们 可以更简单方便地复用成功的设计和体系结构 将已证实的技术表叔成设计模式也会使新系统开发者更加容易理解其设计思路 设计模式帮助你做出有利于系统复用性 通过提供一个显式类和对象作用关系以及它们之间潜在的说明规范 设计模式甚至能够
  • 团队管理的五大核心

    在企业成长的过程中 要把企业做大和做强 探究其意义 是一个过程 期间每个阶段所面临的不同问题赋予了企业成长过程中不同的意义 必须不断提升企业的内在素质 形成企业管理的五大核心能力 才能在成长的道路上走的四平八稳 团队管理的五大核心是什么呢
  • ssh错误:unable to authenticate解决办法

    第三方图形化工具SQLyog远程连接Linux数据库 出现ssh错误 unable to authenticate mysql8 0之前没有出现该问题 在mysql8 0后就会出现该问题 MySQL 8 0 之前的版本加密规则是 mysql
  • 特征选择:最大信息系数(MIC;Maximal Information Coefficient)【用于衡量两个变量X和Y之间的关联程度,线性或非线性的强度,常用于机器学习的特征选择】

    一 概念 1 1 MIC MIC 即 Maximal Information Coefficient 最大信息系数 属于Maximal Information based Nonparametric Exploration MINE 最大的
  • MyCobot六轴机械臂的基本操作(二)

    上一讲我们做ssh和vnc的设置 有小伙伴问设置些有什么用 那么这里我先来解释一下这些功能有什么用处 首先我们可以通过ssh在我们的Windows桌面进行程序开发 然后上传到树莓派进行验证 我们也可以在windows平台通过vnc远程操作我
  • Qt发布安装程序(打包依赖库+生成安装程序)

    目录 打包Qt依赖库 打包其它依赖库 生成安装程序 下载并安装Inno Setup 5 使用Inno Setup 5 Qt编译好的项目是不能直接被双击运行的 如下所示 缺少了依赖的库 需要添加进去 打包Qt依赖库 Qt提供了可以打包依赖的Q
  • onnx的VS2022和QT部署中遇到的问题GetInputName()函数报错问题

    这个问题是因为onnxruntime在1 7版本改变了函数名的原因 GetInputName 改名成了GetInputNameAllocated 在修改函数名后需要做一些小调整如下 修改前 修改后 在qt中也遇到了这个问题 修改前 修改后
  • [深入理解NAND Flash (颗粒篇) ] QLC NAND 已来未热,是时候该拥抱了?

    前言 伴随着闪存芯片的发展趋势 现如今便宜 大容量的SSD基本上都需要上QLC闪存芯片了 一时间QLC有山雨欲来之势 大容量QLC SSD的普及似乎已经触手可及 虽然现在主流是 TLC NAND 第三代 但下一代 Q L C N A N D
  • iOS开发—RunLoop详解

    随着oc语言不断迭代 苹果的API也是逐步完善 RunLoop在实际开发中应用的越来越少 但是在面试中 假如面试官问你RunLoop的相关知识了解 那就相当于面试官在问你从事iOS开发工作的真实年限问题 那么下面我们就详细了解一下RunLo
  • Linux(阿里云)禅道部署

    开源版本下载地址 底部 禅道18 1 禅道开源项目管理软件 本人选择安 Linux一键安装 csdn下载链接 https www zentao net dl zentao 18 1 ZenTaoPMS 18 1 zbox 64 tar gz
  • Windows10 安装Geant4-支持Release/Debug版本

    1 预先下载的软件 数据包 1 安装CMake 2 安装Visual Studio 可在官网安装社区版 免费 3 下载官网 https geant4 web cern ch support download 中的Source File zi
  • 为了在 Windows 11 上启用 IE ,我撸了个修复工具

    网管小贾的博客 www sysadm cc Windows 11 正式版已于前不久官宣发布了 好不好用呢 我想八成的人都是冲着尝鲜去的 所以说好用的不少 说不好用的也是大有人在 对我们来说 不管是真的好用还是真的不好用 那完全是见仁见智的个
  • 生活中哪些地方运用计算机网络,计算机网络技术在生活中应用.doc

    计算机网络技术在生活中应用 计算机网络技术在生活中应用 摘 要 近年来 计算机网络技术得以飞速发展 也在很大程度上改变了人们的生活方式 它可以说是人类发展历程中的新突破 进入二十一世纪之后 社会逐渐向着网络化的方向发展 计算机网络技术逐渐成
  • 2021水流向何处

    只要房价不涨 不用担心钱被稀释 钱不值钱 说白了就是货更加值钱了 货变贵了 这个货可以是白菜萝卜 可以是汽车 也可以是房子 汽车等工业品明显是更加不值钱 变便宜了 白菜萝卜等需要大量纯粹劳动力的货 是变贵了 但是人民工资水平的上涨能够更上它
  • springboot+mybatis+redis+thymeleaf Web项目搭建 开箱即用

    手动搭建了一个springboot mybatis redis thymeleaf的Web后台项目 因此写篇博客记录下搭建的完整过程 文章最后有完整代码地址 首先简单介绍下用到的技术框架及用途 1 springboot框架 项目主体结构 2
  • 简单递归(最大公约数,阶乘)

    include
  • Centos6.8安装glib-2.32.1

    Centos6 8安装glib 2 32 1遇到的问题及解决方法 1 glib 2 32 1下载网址 http ftp gnome org pub gnome sources glib 2 32 glib 2 32 1 tar xz 2 执
  • OpenWrt系统安全改进<三> --- Web UI密码错误控制

    OpenWrt系统安全改进 lt 二 gt 中所做的尝试 是为了增强用户登录的鉴权机制 密码输错三次就禁用用户一段时间 PAM可以实现对用户登录的控制 但是进一步操作中发现WebUI的登录并没有支持PAM 前功尽弃 了解了一下OpenWrt