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

news2024/9/24 21:27:42

 

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.coloradmin.cn/o/810377.html

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

相关文章

DataStructure--Basic

程序设计数据结构算法 只谈数据结构不谈算法就跟去话剧院看梁山伯与祝英台结果只有梁山伯在演,祝英台生病了没来一样。 本文的所有内容都出自《大话数据结构》这本书中的代码实现部分,建议看书,书中比我本文写的全。 数据结构,直…

论文笔记——Influence Maximization in Undirected Networks

Influence Maximization in Undirected Networks ContributionMotivationPreliminariesNotations Main resultsReduction to Balanced Optimal InstancesProving Theorem 3.1 for Balanced Optimal Instances Contribution 好久没发paper笔记了,这篇比较偏理论&…

【笔试强训选择题】Day32.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言 一、Da…

线性代数(应用篇):第五章:特征值与特征向量、第六章:二次型

文章目录 第5章 特征值与特征向量、相似矩阵(一) 特征值与特征向量1.定义2.性质3.求解(1)具体型矩阵试根法、多项式带余除法:三阶多项式分解因式 (2)抽象型矩阵 (二) 相似1.矩阵相似(1)定义(2)性质 2.相似对角化(1)定义(2)相似对角化的条件(n阶矩阵A可相…

自动化运维工具——Ansible

自动化运维工具——Ansible 一、Ansible概述二、ansible 环境安装部署1.管理端安装 ansible2.ansible 目录结构3.配置主机清单4.配置密钥对验证 三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9&a…

LeetCode102.Binary-Tree-Level-Order-Traversal<二叉树的层序遍历>

题目: 思路: 写过N叉树的层序遍历,(8条消息) LeetCode429.N-Ary-Tree-Level-Order-Traversal<N 叉树的层序遍历>_Eminste的博客-CSDN博客 使用栈保存每一层的结点。然后每次当前层结束。将这一层的值添加进去res中。…

【Jetpack 之 Lifecycle】

Jetpack 之 Lifecycle 在本系列文章中,我们准备分析Jetpack 架构组件。首先我们从最基础的组件开始: Lifecycle, 可以说Jetpack 大部分架构组件都是基于Lifecycle 建立的,此也为Jetpack 架构组件的基础。 关于此此组件的介绍和简…

回答网友 修改一个exe

网友说:他有个很多年前的没有源码的exe,在win10上没法用,让俺看一下。 俺看了一下,发现是窗体设计的背景色的问题。这个程序的背景色用的是clInactiveCaptionText。clInactiveCaptionText 在win10之前的系统上是灰色,但…

【Ajax】笔记-原生jsonp跨域请求案例

原生jsonp跨域请求 输入框&#xff1a;输入后&#xff0c;鼠标移开向服务端发送请求&#xff0c;返回用户不存在(直接返回不存在&#xff0c;不做判断) JS <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

ubuntu22.04 DNSSEC(加密DNS服务) configuration

/etx/systemd/resolved.conf是ubuntu下DNS解析服务配置文件&#xff0c;systemd为ubuntu下system and service配置目录 step 1——修改resolved.conf参数 管理员权限打开 /systemd/resolved.conf sudo nano /etc/systemd/resolved.conf修改如下&#xff1a; # This file i…

17-C++ 数据结构 - 栈

&#x1f4d6; 1.1 什么是栈 栈是一种线性数据结构&#xff0c;具有后进先出&#xff08;Last-In-First-Out&#xff0c;LIFO&#xff09;的特点。可以类比为装满盘子的餐桌&#xff0c;每次放盘子都放在最上面&#xff0c;取盘子时也从最上面取&#xff0c;因此最后放进去的盘…

68. 文本左右对齐

题目链接&#xff1a;力扣 解题思路&#xff1a;遍历单词数组&#xff0c;确定每一行的单词数量&#xff0c; 之后就可以得到每一个需要补充的空格数量。从而得到单词之间需要补充的空格数量。具体算法如下&#xff1a; 确定每一行的单词数量 初始值&#xff1a; num 0&…

基于springboot+mybatis+jsp日用品商城管理系统

基于springbootmybatisjsp日用品商城管理系统 一、系统介绍二、功能展示1.主页(客户)2.登陆、注册&#xff08;客户&#xff09;3.我的购物车(客户)4.我的订单&#xff08;客户&#xff09;5.我的商铺&#xff08;商家&#xff09;6.商品管理&#xff08;商家&#xff09;7.订单…

【编程规范】一文讲解开发中的命名规范

命名规范 好的代码本身就是注释, 所以我们需要统一命名风格。 ​ 在本文中&#xff0c;将从大到小&#xff0c;从外到内&#xff0c;总结Java编程中的命名规范。文中将会涉及到日常工作中常见的命名示例&#xff0c;如包命名&#xff0c;类命名&#xff0c;接口命名&#xff0c…

计算机网络——学习笔记

付费版&#xff1a;直接在上面的CSDN资源下载 免费版&#xff1a;https://wwsk.lanzouk.com/ijkcj13tqmyb 示例图&#xff1a;

BIOS相关知识

简介 BIOS&#xff08;Basic Input Output System&#xff09;基本输入输出系统&#xff0c;固化在服务器主板的专用ROM中&#xff0c;是加载在服务器硬件系统上最基本的运行程序。BIOS位于硬件和系统中间&#xff0c;用来初始化硬件&#xff0c;为操作系统运行做准备 功能 …

C语言进阶——文件的打开(为什么使用文件、什么是文件、文件的打开和关闭)

目录 为什么使用文件 什么是文件 程序文件 数据文件 文件名 文件的打开和关闭 文件指针 打开和关闭 为什么使用文件 在之前学习通讯录时&#xff0c;我们可以给通讯录中增加、删除数据&#xff0c;此时数据是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯…

【算法提高:动态规划】1.1 数字三角形模型

文章目录 例题列表1015. 摘花生1018. 最低通行费1027. 方格取数&#xff08;两条路径同时走&#xff09;⭐⭐⭐⭐⭐275. 传纸条&#xff08;转换成 两条路径同时走&#xff09; 例题列表 1015. 摘花生 https://www.acwing.com/problem/content/1017/ 状态要么从左转移过来&…

基于双层优化的大型电动汽车时空调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

❤️创意网页:贪吃蛇游戏 - 创造一个经典的小游戏

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…