web随想笔记

news2024/12/27 15:58:54

1 OJ大概架构

1.0 OJ页面–>WEB服务器(SpringBoot)–>判题机(Linux)

OJ页面将提交的代码封装成json格式发给web服务器端,服务器端接收json获取信息,进行进一步封装,转发给判题机,拆解json数据获得程序代码,运行程序返回结果。

1.1 判题机

IO重定向判断程序是否正确,返回json数据,程序的所有输出重定向到一个文件,将输出的文件与标准答案的文件相比较,判断是否正确。

难点:如何防止恶意代码

如,提交了C++代码,system("shutdown -s -t 120"),如果服务器照常运行会使服务器关机,造成严重后果。

1.2 解决方法

  1. 构造沙箱,记录运行情况
  2. 黑名单:禁用部分危险函数库的使用(难度较大)
  3. 关键字过滤(行不通,C语言有强大的宏定义)
  4. docker(存在安全隐患)
  5. 白名单(推荐):只给它常用的调用函数,其他的都不能调用,危险操作被禁止,优点:简单方便易实现

2 验证码设计

2.1 朴素思路

服务器端生成验证码字符串和验证码图片,验证码字符串存入session中以便登录时判断验证码是否正确,之后Bufferedimage格式图片通过网络IO写入到response,发送到客户端显示,客户端输入内容再发送到服务器端。

2.2 存在问题

自己手写的验证码很容易被OCR计算机视觉识别,一旦拿到了账号和密码,就可以通过程序自动识别验证码并且通过无限制爬取用户信息。

2.3 解决

验证码的设计是一场计算机视觉和人之间的博弈,是一场反图灵测试,需要的效果是人能够识别,但机器不能够识别,可以在图片生成时,在图片里加一些干扰,如横线、点等干扰OCR的识别。

把原来识别数字改成识别一个等式比如0+3=?,进一步加大机器识别难度。

2.4 jcaptcha

一个开源的验证码生成工具

2.5 前后端分离(Springsecurity结合boot,jwt,Redis,图片验证码实现登录认证权限功能)

在这里插入图片描述 在这里插入图片描述
  • 因为我们是想要实现图片验证码功能,但是我们发现security给我们默认提供的UsernamePasswordAuthentication的filter是不能用的,因为他那里只是对用户名和密码进行校验,因此我们可以这样想,我们使用验证码其实就是在用户名和密码的校验上多了一层而已,因此我们可以在这个过滤器之前再加一个过滤器来进行验证码校验,当然我们也可以通过自定义过滤器继承UsernamePasswordAuthenticationFilter,然后自己把验证码验证逻辑和认证逻辑写在一起,这也是一种解决方式。
  • 这里我们便采用加前置图片过滤器CaptchaFilter来提前校验验证码是否正确,这样的话我们是可以继续使用security给我们提供的用户名与密码的过滤器的,然后登录正常或失败我们都可以通过对应的Handler来返回我们特定格式的封装结果数据。
  • 因为前后端分离,我们禁用了session,所以我们把验证码放在了redis中,使用一个随机字符串作为key,并传送到前端,前端再把随机字符串和用户输入的验证码提交上来,这样我们就可以通过随机字符串获取到保存的验证码和用户的验证码进行比较了是否正确了。
  • 然后因为图片验证码的方式,所以我们进行了encode,把图片进行了base64编码,这样前端就可以显示图片了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

擦除编码(EC)数据中心中的最优机架协调更新

擦除编码EC在数据中心中的最优机架协调更新介绍与背景工作文章外主流的工作文章摘要RackCU, the optimal Rack-Coordinated Update solution数据增量基础更新奇偶校验基础更新RackCU其他的更新方法一些数值实验可以仅需改进的地方参考文献介绍与背景工作 擦除编码(…

Simulink建模:CRC校验模型

本文研究CRC校验的Simulink模型及其代码生成。 文章目录1 CRC校验2 C代码形式3 Matlab/Simulink建模及代码生成3.1 Matlab Function建模3.2 For Iteration子系统建模4 总结与思考1 CRC校验 在汽车软件开发中,CRC校验常用于CAN通信中。通常将某个CAN报文中的数据通过…

【AVL树】

目录基础知识AVL树的定义结点的平衡因子结构体部分操作思路AVL树的插入平衡化旋转左单旋转右单旋转先左后右双旋转先右后左双旋转插入函数AVl树的删除左平衡代码右平衡代码删除函数基础知识 AVL树的定义 一棵AVL树或者是空树,或者是具有谢下列性质的二叉搜索树&am…

Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器

3.安装 Docker 可使用 yum list docker-ce --showduplicates | sort -r 命令来查看 Docker 的所有版本。 [rootDocker ~]# yum -y install docker-ce-17.12.1.ce #安装docker 4.启动 Docker 并设置开机自启 [rootDocker ~]# systemctl start docker [rootDocker ~]# syste…

uniClound云开发创建流程

uniClound是 DCloud 联合阿里云、腾讯云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。云服务创建项目,使用熟悉的js,轻松搞定前后台整体业务,使前端开发离全栈开发又进一步,尤其是一键生成代码的功能&…

海外的 SEO 网站如何进行优化

作为一个已经出海12年的专业平台,米贸搜为你整理了一份海外SEO优化方法,希望对你有所帮助。 无论是平台还是外贸网站,无论是外贸还是内销,一个绕不开的话题就是流量。随着各平台和外贸网站竞争的加剧,流量的获取成本也…

【ML】基于机器学习的心脏病预测研究(附代码和数据集,逻辑回归模型)

心脏病是人类健康的头号杀手, 全球大约1/3的人口死亡是由心脏病引起的。而我国,每年大概有几十万人口死于心脏病。如果我们可以通过提取人体相关的指标(既往病史、家族病史、血压情况、血糖情况等等),通过数据挖掘方式来分析不同特征对于心脏病的影响,或者建立电子病历,…

flink1.13.2 text文本数据迁移为orc+snappy数据解决方案

1.表结构不变(列名,分区不变),表存储和压缩算法改变 1.1. 外部表(未分区) 1.1.1. 拷贝源表结构,创建外部表 create table if not exists [目标表名] like [源表名] 示例: create table if not exists dwm_soh_estimate_nopartition_out_snappy like dwm_soh_estimate_n…

10x倍加速PDE的AI求解:元自动解码器求解参数化偏微分方程

研究背景 科学和工程中的许多应用需要求解具有不同方程系数、不同边界条件甚至不同求解域形状的偏微分方程(Partial Differential Equation,PDE),即需要求解一个方程族而不是单个方程。这类应用经常在反问题求解、控制和优化、风险评估和不确定性量化领域…

C++GUI之wxWidgets(4)-编写应用涉及的类和方法(1)

目录wxApp ClasswxApp::OnInit()wxFrame ClasswxFrame处理的事件wxApp Class 当wxUSE_GUI1时,wxApp类代表应用程序本身。 除了wxAppConsole提供的特性外,它还可以跟踪顶部窗口(SetTopWindow()),并添加了对视频模式的支持(SetDisp…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java小区宠物信息管理系统0v9l2

最近发现近年来越来越多的人开始追求毕设题目的设创、和新颖性。以往的xx管理系统、xx校园系统都过时了。大多数人都不愿意做这类的系统了,确实,从有毕设开始就有人做了。但是很多人又不知道哪些毕设题目才算是新颖、创意。太老土的不想做,创…

高低JDK版本中JNDI注入(上)

目录 前言: (一)RMI 0x01 低版本 1.1 服务端 1.2 客户端 1.3 ExportObject.java 0x02 高版本 (二)LDAP 0x01低版本 1.1 服务端 1.2 客户端 1.3 ExportObject.java 前言: 这篇文章主要是分析在高低版本JDK中JNDI注入RMI和LDA…

痞子衡嵌入式:浅析IAR下调试信息输出机制之硬件UART外设

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设。 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地定位和分析程序…

泰迪·滇西科技师范学院智能工作室分享:第一章NumPy库——先基础区别数组和列表

前言 来看NumPy库的应该都是接触到庞大数据处理的朋友吧。NumPy是一个简洁好用的数据库,尤其是在科学计算上,专为进行严格数字处理而产生的。其中的ndarray可以说是NumPy库的心脏,它提供了一个强大的N维数组对象,这一章我们先来简…

2 寄存器

寄存器 CPU是由运算器、控制器、寄存器等器件构成,他们依靠内部总线连接。 运算器进行信息处理:寄存器进行信息存储;控制器控制各种器件进行工作;内部总线连接各种器件,在它们之间进行数据的传送。 寄存器是程序员可…

[附源码]Python计算机毕业设计Django社区住户信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

AI 绘画整体认知

体验 ChatGPT 之后,深刻感觉到 “了解 AI 绘画” 这件事必须得安排上了。 于是用了两三个日夜,了解如下: (文末附完整脑图链接) 一、发展时间线 二、使用已有的AI绘画云平台(目前国内外有很多&#xff09…

华为与思科路由器静态路由配置

一、华为路由器配置静态路由 1、静态路由基础 拓扑如下: 配置静态路由,使得PC1可以ping通PC3。 R1: interface Ethernet0/0/0ip address 124.16.8.1 255.255.255.0 # interface Ethernet0/0/1ip address 110.69.70.1 255.255.255.0 # # ip route-static 172.16.3.0 255.25…

Java_笔记_继承_虚方法表_成员变量方法构造_thisSuper

一、继承的概念以及优势: 1.概念: 1)继承是面向对象三大特征(封装,继承,多态)之一,可让类与类之间产生子父的关系。 2)封装:对象代表什么,就封装…

VCS Design Compiler(1)

|||||||||||| ========= =============================== VCS & Design Compiler 联合应用 =================================