读发布!设计与部署稳定的分布式系统(第2版)笔记26_安全性上

 

1. 安全问题

1.1. 系统违规并不总是涉及数据获取,有时会出现植入假数据,例如假身份或假运输文件

1.2. 必须在整个开发过程中持续地把安全内建到系统里,而不是把安全像胡椒面那样在出锅前才撒到系统上

2. OWASP

2.1. Open Web Application Security Project

2.2. 开放式Web应用程序安全项目

2.3. 从2001年开始,OWASP基金会开始对应用程序的安全事故和漏洞进行编目

3. 注入

3.1. 当解析器或解释器需要依赖用户提供的输入内容时,注入攻击就有机可乘

3.2. “来自用户”并不仅仅意味着刚刚从HTTP请求中获得的用户输入,从数据库中获取的数据也可能源自用户

3.3. SQL注入

3.3.1. 埋下SQL注入攻击隐患是绝对不允许的

3.3.2. 存在SQL注入漏洞

String query = "SELECT * FROM STUDENT WHERE NAME = '" + name + "'; "

3.3.3. 更好的写法

String query = "SELECT * FROM STUDENT WHERE NAME = ? ; "
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, name);
ResultSet results = stmt.executeQuery();

3.4. 常见的用于注入攻击的媒介是XML

3.4.1. XML外部实体(XXE)注入是一种基于XML的攻击

3.4.2. 大多数XML解析器在默认情况下容易受到XXE注入的攻击

3.4.3. 绝不能用正则表达式自行解析XML

3.5. 格式化字符串攻击

3.6. Eval注入

3.7. XPATH注入

4. 失效的身份验证和会话管理

4.1. 人们常在URL和超链接上使用查询参数携带会话ID

4.2. 会话ID不仅对每台交换机、路由器和代理服务器可见,也对所有人可见

4.3. 会话劫持

4.4. 会话固定攻击是会话劫持的变体

4.5. 如果会话ID是在任意可预测的过程中生成的,那么服务也容易受到“会话预测”攻击

4.5.1. 基于用户自己的数据生成会话ID肯定有风险,按顺序生成会话ID绝对是最差的选择,虽然会话ID看起来像是随机的,但这并不意味着它就是随机生成的

4.6. 处理会话ID准则

4.6.1. 使用熵较大且字符数量较多的会话ID

4.6.2. 使用具有良好加密属性的伪随机数生成器来生成会话ID

4.6.2.1. 编程语言内置的rand()函数可能并不是这种生成器

4.6.3. 防范XSS攻击,从而避免执行那些会显示会话ID的脚本

4.6.4. 当用户进行身份验证时生成新的会话ID

4.6.4.1. 发生会话固定攻击,攻击者将无法访问用户账户

4.6.5. 使用平台内置的会话管理功能

4.6.5.1. 做了相关的强化来抵御绝大多数这类攻击

4.6.5.2. 要及时更新平台的安全补丁和版本

4.6.6. 使用cookie交换会话ID,不要通过其他机制接受会话ID

4.6.6.1. 有些服务器虽然使用cookie发出会话ID,但仍然能通过查询参数接收会话ID,要禁用该功能

4.7. 密码注意事项

4.7.1. 不要将密码保存在数据库中

4.7.2. 在处理“忘记密码”操作时,绝对不要用电子邮件向用户发送密码

4.7.3. 将强大的散列算法应用于密码,并给密码“加盐”

4.7.3.1. 给密码添加一些随机数据,加大字典攻击的难度

4.7.4. 允许用户输入过长的密码

4.7.5. 允许用户将密码粘贴到图形用户界面中以便于用户使用密码管理工具生产和使用密码

4.7.6. 计划在未来某个时候用散列算法重置密码,而且必须不断增加散列算法的强度,同时也确保可以更换加盐值

4.7.7. 禁止无限制地尝试身份验证

4.7.8. Kerberos、NTLM和OAuth都是第三方身份验证系统

5. 跨站脚本攻击

5.1. 一些注入攻击者会将“枪口”对准日志查看者,通过将恶意数据放入日志字符串中来搞破坏

5.1.1. 如果日志查看器不能很好地转义HTML字符,那么它将借助日志查看器用户(通常是管理员)的系统访问特权,执行这些恶意代码

5.2. 防范XSS攻击的第一条底线是永远不要对输入内容抱有信任态度

5.3. 不要用拼接字符串的形式构建结构化数据

5.4. 找一个能生成HTML的程序库,自动转义所有内容,并且在做不安全的事情前必须多次确认

6. 失效的访问控制

6.1. 攻击者可以通过应用程序访问到不应访问的数据

6.2. 让URL探测令人望而却步

6.2.1. 降低URL探测的价值

6.2.1.1. 切忌使用数据库ID作为URL的标识符

6.2.1.2. URL中使用的标识符应该是唯一但非连续生成的

6.2.1.2.1. 攻击者可以探测ID空间,但发现有趣结果的可能性会变得很低

6.2.2. 使用会话敏感的通用URL

6.2.2.1. 不要使用http://www.example.com/users/1023

6.2.2.2. 使用http://www.example.com/users/me

6.2.3. 使用特定会话从随机ID到真实ID的映射也会有帮助

6.2.3.1. 使用更多的内存,但避免了随机ID所需的额外的存储空间

6.2.3.2. 该服务必须为所有响应的URL随机分配标识符

6.2.3.3. 当跨越不同的会话时,链接就不再有效,而这违反了REST原则

6.2.3.4. 缺点

6.3. 检查对象最初的授权信息

6.3.1. 服务混淆“拥有URL”和“允许访问资源”是对象访问出现问题的根本原因

6.3.2. 如果资源只应给已授权的调用方使用,那么所有请求都应进行服务鉴权

6.3.3. 假设当调用方请求一个不存在的资源时,服务会响应404 Not Found

6.3.3.1. 404的意思是“没有听说过这个人”

6.3.4. 当请求一个存在却未被授权的资源时,服务会响应403 Authentication Required

6.3.4.1. 403意味着“是的,那是我的顾客”

6.3.5. 服务会泄露资源是否存在的信息

6.3.5.1. 如果调用方未被授权查看某个资源的内容,那么得到的响应是“该资源根本不存在”

6.3.5.2. 假设该资源是按ID进行标识的顾客,那么攻击者就可以通过请求顾客1、2、3等找出系统到底有多少顾客

6.3.5.3. 当响应从403变为404时,他们就发现了顾客群的规模

6.3.5.4. 接下来每个月都能看到这个数字的变化

7. 唯一安全处理文件上传的方法

7.1. 将客户端的文件名内容视为纯粹的字符串存储到数据库字段

7.2. 不要用请求中的文件名构建文件访问路径

7.3. 为真实的文件名随机生成唯一键

7.4. 将其连接到数据库中用户指定的文件名

7.5. 文件系统中的文件名将受服务控制,不会包含任何外部输入内容

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Godot 4 源码分析 - 动态导入图片文件

用Godot 4尝试编一个电子书软件,初步效果已经出来,并且通过管道通信接口可以获取、设置属性、调用函数,貌似能处理各种事宜了。 其实不然,外因通过内因起作用,如果没把里面搞明白,功能没有开放出来&#x…

【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错

今天,我们就使用 Sentinel 实现接口的限流,并使用 Feign 整合 Sentinel 实现服务容错的功能,让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开,所以,这里我们使用的服…

详解Mybatis之分页插件【PageHelper】

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 一. 什么是分页?二. 为什么使用分页?三. 如何设计一个Page类(分…

【玩转python系列】【小白必看】使用Python爬虫技术获取代理IP并保存到文件中

文章目录 前言导入依赖库打开文件准备写入数据循环爬取多个页面完整代码运行效果结束语 前言 这篇文章介绍了如何使用 Python 爬虫技术获取代理IP并保存到文件中。通过使用第三方库 requests 发送HTTP请求,并使用 lxml 库解析HTML,我们可以从多个网页上…

《Kali渗透基础》11. 无线渗透(一)

kali渗透 1:无线技术特点2:IEEE 802.11 标准2.1:无线网络分层2.2:IEEE2.3:日常使用标准2.3.1:802.112.3.2:802.11b2.3.3:802.11a2.3.4:802.11g2.3.5:802.11n …

python的包管理器pip安装经常失败的解决办法:修改pip镜像源

pip 常用的国内镜像源: https://pypi.tuna.tsinghua.edu.cn/simple/ // 清华 http://mirrors.aliyun.com/pypi/simple/ // 阿里云 https://pypi.mirrors.ustc.edu.cn/simple/ // 中国科技大学 http://pypi.hustunique.com/ // 华中理…

stm32通过ESP8266接入原子云

1. ESP8266模块需要烧录原子云固件,此原子云固件和正常的ESP8266固件相比添加了ATATKCLDSTA 和 ATATKCLDCLS 这两条指令: 2. 原子云账号注册及设备建立 设备管理-新增设备-ESP8266 新建设备后新建分组,将设备加入到此分组中: 至此…

【算法基础:贪心】6. 贪心

文章目录 区间问题905. 区间选点(排序 贪心)908. 最大不相交区间数量(排序 贪心)906. 区间分组(排序 优先队列 贪心)⭐907. 区间覆盖(排序 贪心) Huffman树148. 合并果子&#…

安卓:Picasso——加载网络图片的库

目录 一、Picasso介绍及其优势 二、Picasso的使用方法 1、添加依赖: 2、Picasso常用方法: 1、加载图像: 2、图像显示: 3、图像处理: 4、图像占位符和错误处理: 5、缓存控制: 6、清除缓…

关于前端框架vue2升级为vue3的相关说明

一些框架需要升级 当前(202306) Vue 的最新稳定版本是 v3.3.4。Vue 框架升级为最新的3.0版本,涉及的相关依赖变更有: 前提条件:已安装 16.0 或更高版本的Node.js(摘) 必须的变更:核…

06-MySQL-基础篇-SQL之DCL语句

SQL之DCL语句 前言DCL 管理用户查询用户创建用户修改用户密码删除用户说明 权限控制常见权限描述查询权限授予权限撤销权限说明 前言 本篇来学习下SQL中的DCL语句 DCL DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权…

附录1-将uni-app运行到微信开发者工具

目录 1 在manifest.json写入AppID 2 配置微信开发者工具的安装路径 3 微信开发者工具的安全设置 4 运行 5 修改一些配置项 1 在manifest.json写入AppID 2 配置微信开发者工具的安装路径 如果你忘了安装在哪里了,可以右键快捷方式看一下属性 在运行设置…

剑指offer42.连续子数组的最大和

这道题挺简单的,看完题脑子里出现的想法就是用一个sum来把数组从前往后加,如果sum小于0,那么对于和来说是会减小的,所以这个时候直接把sum归零,然后从这个位置再往后加,用一个max_sum来记录sum的最大值&…

SpringBoot整合ActiveMQ

ActiveMQ简单使用 JMS ActiveMQ 下载安装 https://activemq.apache.org/components/classic/download/解压缩文件。进入win64目录,双击运行activemq.bat文件,运行服务 将下面的网址输入到浏览器,用户名和密码都是admin SpringBoot整合Act…

MP的开发流程

MP的开发流程 1、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

LeetCode 1857. Largest Color Value in a Directed Graph【拓扑排序,动态规划】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

自动化运维工具—Ansible概述

Ansible是什么&#xff1f; Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、…

linux | vscode | makefile | c++编译和调试

简单介绍环境&#xff1a; vscode 、centos、 gcc、g、makefile 简单来说就是&#xff0c;写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程&#xff0c;以及官网也看了很多次&#xff0c;最…

LabVIEW开发环境试验箱控制器

LabVIEW开发环境试验箱控制器 环境或气候试验箱是一种外壳&#xff0c;用于模拟各种材料&#xff08;包括工业产品、生物物质、复合材料、电子设备和航空航天部件&#xff09;的特定环境条件&#xff0c;并评估调节对这些材料的影响。 环境试验箱&#xff08;ETC&#xff09;…

短视频矩阵营销系统技术开发者开发笔记分享

一、开发短视频seo抖音矩阵系统需要遵循以下步骤&#xff1a; 1. 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 2. 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的…