首页 > 系统相关 >Nginx(openresty) 通过lua结合Web前端 实现图片,文件,视频等静态资源 访问权限验证,进行鉴权 ,提高安全性

Nginx(openresty) 通过lua结合Web前端 实现图片,文件,视频等静态资源 访问权限验证,进行鉴权 ,提高安全性

时间:2024-05-28 16:00:20浏览次数:17  
标签:Web lua 访问 timestamp nginx openresty local 鉴权

1 本文系统环境:

安装openresty(nginx),可参考:

test@ubuntuserver:~$ cat  /etc/os-release 
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
test@ubuntuserver:~$ uname -a
Linux ubuntuserver 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
test@ubuntuserver:~$ nginx -v
nginx version: openresty/1.25.3.1

2 nginx 配置文件共享服务器静态资源

#修改配置
sudo  vi /usr/local/openresty/nginx/conf/nginx.conf 
location /file {
                autoindex on;
                autoindex_localtime on;
                alias /data/www;
                charset utf-8,gbk;
 }
#热启动nginx
sudo systemctl  reload  nginx.service

 

#放一张图片测试 nginx文件服务器,可以直接访问

3 nginx + lua 开始鉴权访问静态资源

鉴权接口,访问静态资源需要带上时间戳(timestamp)和token参数;timestamp为毫秒时间戳,75s之内时间有效(失效时间可以自定义);token等于md5(timestamp+secret_key);时间过期,访问返回403 Forbidden;验证成功可以正常访问文件。可以结合前端开发一起授权访问文件服务器。本文只做测试(⊙﹏⊙)


#增加以下3行
sudo  vim /usr/local/openresty/nginx/conf/nginx.conf
access_by_lua_file /usr/local/openresty/nginx/lua/fileaccess.lua;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
#lua 文件
 cat /usr/local/openresty/nginx/lua/fileaccess.lua 
package.path = '/usr/local/openresty/lualib/resty/?.lua;'
local args = ngx.req.get_uri_args()
local  token1 = args["key"]
local timestamp = args["timestamp"]
                local secret_key = "prefix_wym666"
                local diff_time  = 120000
                ngx.update_time()
                local local_time = ngx.time() * 1000
                local timestamp1 = tonumber(timestamp)
                if (timestamp1 == nil or token1 == nil) then
                    ngx.exit(403)
                elseif (timestamp1 + diff_time < local_time) then
                    ngx.exit(403)
                end

                local access_token = ngx.md5(secret_key..timestamp1)
                if token1 == access_token then
                    return true
                else
                    ngx.exit(403)
                end

#热启动nginx
sudo systemctl  reload  nginx.service

4访问测试

#直接访问返回

#URL 带上timestamp和Token 访问正常

#时间超过75秒,访问看,返回403

 

5 nginx 文件服务器 ,通过lua 编写接口来鉴权,访问需要授权,如此一定程度,提高安全性

欢迎大家一起交流, 可以加我的微信(⊙﹏⊙) 

标签:Web,lua,访问,timestamp,nginx,openresty,local,鉴权
From: https://blog.csdn.net/tonyhi6/article/details/139231015

相关文章

  • ctfshow web 月饼杯II
    web签到<?php//Author:H3h3QAQinclude"flag.php";highlight_file(__FILE__);error_reporting(0);if(isset($_GET["YBB"])){if(hash("md5",$_GET["YBB"])==$_GET["YBB"]){echo"小伙子不错嘛!!......
  • WebGIS 智慧城市可视化合集 | 图扑数字孪生
    智慧城市可视化建设不仅提升了城市管理的科技含量和效率,还促进了城市可持续发展,提升了居民的生活质量。随着技术的不断发展和应用,智慧城市可视化建设将会更加丰富和完善,为城市发展带来更加广阔的前景。效果展示图扑应用自研HTforWeb产品搭建轻量化GIS智慧城市,一屏覆盖城市......
  • .net core的WebAPI+Vue2实现调用设备拍照上传图片功能
    在工作中有时候会遇到上传文件上传图片或者拍照上传图片功能。这时候底下的内容就有可能可以帮助到你。后端的支持上传图片和上传文件功能。前端如果你选择普通上传功能就是普通上传功能,我这里选择的是调用相机设备实现拍照上传图片功能。1.首先这是后端的控制器接口。1///<......
  • Python中Web开发-Flask框架
            大家好,在当今数字化的世界中,Web应用程序已经成为人们日常生活和商业活动中不可或缺的一部分。为了满足用户需求,开发人员需要选择适合他们项目需求的工具和技术。PythonFlask就是这样一款灵活而强大的工具,它能够帮助开发人员快速构建轻量级的Web应用程序......
  • ChatGPT-Next-Web一键部署搭建教学:Github开源+Vercel+API 快速部署
    ChatGPT-Next-Web一键部署搭建教学:Github开源+Vercel+API快速部署文章目录ChatGPT-Next-Web一键部署搭建教学:Github开源+Vercel+API快速部署导语:需要用到的链接汇总1、github项目直达地址2、vercel服务器直达地址3、三方API获取一、Github项目`star`+Vercel......
  • 基于Web停车场管理系统的设计与实现(论文 + 源码)
    关于基于Web停车场管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89365923基于Web停车场管理系统的设计与实现 摘要随着现代社会的快速发展,人民生活水平快速提高,汽车的数量飞速增加,在生活小区、办公场所、商场、景点等地方,停车难问题也日益突出......
  • 【讲解下Web前端三大主流的框架】
    ......
  • net core 建立webservice项目
    1、创建项目  2、通过NuGet安装SoapCore 3、创建服务接口及实现类本项目会创建2个webservice服务文件用于测试,所以创建了2个model类和2个接口文件。 Model类:[DataContract]publicclassFactoryModel{///<summary>///工厂号///<......
  • netcore构建webservice以及调用的完整流程
    目录构建前置准备编写服务挂载服务处理SoapHeader调用添加服务调用服务补充内容构建前置准备框架版本要求:netcore3.1以上引入nuget包SoapCore编写服务1.编写服务接口示例usingSystem.ServiceModel;namespaceServices;[ServiceContract(Namespace="http://Demo.WebService......
  • OpenQA.Selenium.WebDriverException The HTTP request to the remote WebDriver serv
    OpenQA.Selenium.WebDriverException:“TheHTTPrequesttotheremoteWebDriverserverforURLhttp://localhost:xxxx/sessiontimedoutafter60seconds.”1.在谷歌浏览器上加上中括号中的内容[--remote-debugging-port=9222]2.使用管理员模式打开谷歌浏览器3.重新生成......