Augenstern's Blog - Augenstern
type: channel
link: https://blog.hufox.cn/author/1/
description: Augenstern
items: 购房的一些思考
items: 记一次服务器迁移
items: React Hook学习
items: 摘抄
items: TypeScript学习笔记
items: 《被讨厌的勇气》读后感
items: 【极客时间】玩转Git三剑客笔记
items: CTF竞赛学习（入门）
items: 大数据技术入门学习（简单概念）
items: CTF-Crypto

购房的一些思考
type: item
date: 2026-04-01T19:38:00+08:00
description: 房屋需求预算：200w-300w之间户型：三室一厅大小：100-120平左右板块：狮山、木渎、看房注意点户型格局方正 ：避免异形、长条或拐角多的户型，浪费面积且不好布置家具动线合理 ：从进门到厨房、卧室、卫生间的路线不交叉、不绕远（尤其小户型）明厨明卫 ：最好都有窗户；暗卫容易潮湿发霉，需要强力排风承重墙位置 ：需要向中介或物业索要户型承重图，后期想拆改非承重墙也要确认居住楼层楼层位置要适中一楼：潮湿、蚊虫、隐私差、采光少。顶楼：漏水风险高、夏天隔热差、水压可能不足。朝向与采光客厅主卧朝南 ：优先选南向，其次是东南、东；纯北向冬天阴冷，西晒严重。楼间距与遮挡 ：实地看房时间最好在冬至前后（下午1-2点），那是一年光照最差的时候，能看出真实采光。窗户大小 ：飘窗是真飘窗（不能拆）还是假飘窗（可拆改），落地窗是否有护栏影响视野。测试方法： 手机指南针测朝向：阳台朝南偏差不超过15°为佳地理位置交通便利性：主要是距离地铁近不近学区：中小学的学校如何周边配套设施：附近距离医院、商场等得房率得房率 = 套内建筑面积 ÷ 建筑面积★ 坑点：当开发商宣传“赠送面积”时，一个重要的真相是：这些面积本身就是国家规定不计算或只计算一半的部分，并非开发商的额外“恩惠”。因此，这部分面积通常 无法载入不动产权证 ，在法律上不具备完整的所有权空间类型产权面积计算规则是否常见“赠送”未封闭阳台（开敞式）计算一半的建筑面积是，开发商常将“不计入”的一半作为“赠送”露台不计算建筑面积是凸窗（飘窗）不计算建筑面积是阁楼/地下室不计算建筑面积是外部不利因素噪音源：高架桥、主干道、铁路、学校操场、菜市场、夜市异味/粉尘：下风向有没有垃圾中转站、污水处理厂、工厂烟囱安全风险：附近有加油站、变电站、高压线看房时打开所有柜门闻一闻，有无霉味、烟味或化学味其他考虑开发商的口碑如何平台上一些住户的反馈物业配套如何贷款相关公积金贷款利率 2.6%商业贷款利率 一年 3% 五年3.5%贷款类型贷款金额月供公积金贷款100w4004元公积金贷款150w6005元商业贷款100w4490元商业贷款150w6736元夫妻双方公积金账户余额之和的15倍，上限150万合同相关

记一次服务器迁移
type: item
date: 2025-12-23T11:28:00+08:00
description: 起因起初手头上有一台阿里云99元/年的云服务器，，但使用起来非常卡顿，经常宕机，让人难以忍受。正好在论坛内，看到有服务器代理商的双十一优惠，一眼看中了2C2G 新加坡 30M带宽 1T/月 有国内线路优化的服务器，于是一次性购买了三年。一开始使用体验不错，域名不需要备案可以直接解析，docker镜像拉取速度极快，网站访问速度可以接受，但好景不长，一段时间后，国内访问速度极慢，和腾讯云的工单客服battle半天，只说新加坡运营商的线路问题，不确定何时解决，要么改用香港优选流量，要么迁移至国内服务器。思考之后，我决定把服务器的各项应用迁移至国内服务器，虽然使用了docker部署，但是迁移起来还是遇到了一些困难，下面我会记录迁移的各个步骤以便后续再次迁移使用。具体操作一、服务器数据文件备份原服务器防火墙策略从腾讯云管理平台导出防火墙策略，管理端口开放情况docker持久化数据从原服务器上下载各持久化数据，上传到新服务器对应目录，其中包含了Mysql数据库数据1panel已安装应用数据备份下载1panel已安装应用二、防火墙策略开通将之前导出的防火墙策略Excel导入新的服务器管理面板处导入即可。三、应用安装/迁移运维面板 -- 1panel安装直接选择在线安装方式，执行以下命令，按照提示一步一步完成安装。bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"配置安装完成后，需要进行以下的配置证书申请开启面板SSL修改SSH默认端口，且开启仅密钥登录应用利用之前备份文件还原已安装应用/opt/1panel/apps/openrestyuptime-kuma个人博客 -- Typechodocker run -d --name=typecho-blog -p 2234:80 -v /data/docker_typecho_data:/data -e PHP_TZ=Asia/Shanghai --restart=always 80x86/typecho:latest个人云盘 -- Cloudrevedocker run -d --name cloudreve -p 5212:5212 -p 6888:6888 -p 6888:6888/udp -v /data/docker_cloudreve_data:/cloudreve/data cloudreve/cloudreve:latest数据库 -- Mysql8.0docker run -it --name=mysql8.0 -p 5555:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx -e TZ=Asia/Shanghai -v /data/docker_mysql_data:/var/lib/mysql -d --restart=always mysql:8.0导航页 -- Sun-Paneldocker run -d --restart=always -p 3002:3002 -v /data/docker_sun-panel_data/conf:/app/conf -v /var/run/docker.sock:/var/run/docker.sock --name sun-panel hslr/sun-panel:latest四、OpenResty代理应用类型panel反向代理blog反向代理cloud反向代理nav反向代理www静态网站status一键部署五、EdgeOne加速1、准备一个已备案域名2、将域名纳入EO管理3、添加子域名，并在DNS添加EO解析4、申请Https证书

React Hook学习
type: item
date: 2025-12-03T10:14:00+08:00
description: 参考链接： React 内置 HookHook简单介绍 定义： 以use开头的函数 作用： Hook有助于在组件中使用不同的React功能 使用： Hook比普通函数更为严格，只能在的组件（或其他 Hook）的 顶层 调用Hook 分类：State HookContext HookRef HookEffect Hook性能 Hook其他 Hook自定义 HookState Hook状态帮助组件，用于“记住”用户的输入信息useState ：声明可以直接更新的状态变量示例：function MyButton(){ const [count,setCount] = useState(0); function handleClick(){ setCount(count+1); } return( Clicked {count} times ) }useReducer：在reducer函数中声明带有更新逻辑的state变量reducer函数 ：将组件的所有状态更新逻辑整合到一个外部函数中，这个函数叫做reduceruseReducer钩子接受参数：一个reducer函数一个初始的state返回内容：一个有状态的值一个dispatch函数（派发用户操作给reducer）示例： {tabs}{tabs-pane label="App.js"}import { useReducer } from 'react'; import AddTask from './AddTask.js'; import TaskList from './TaskList.js'; import tasksReducer from './tasksReducer.js'; export default funtion TaskApp(){ const [tasks, dispatch] = useReducer(tasksReducer, initialTasks); function handleAddTask(text){ dispatch({ type:'added', id:nextId++, text:text, }); } function handleChangeTask(task){ dispatch({ type:'changed', task:task }); } function handleDeleteTask(taskId){ dispatch({ type:'deleted', id:taskId, }); } return ( <> 布拉格的行程安排 <AddTask onAddTask={handleAddTask} /> <TaskList tasks={tasks} onChangeTask={handleChangeTask} onDeleteTask={handleDeleteTask} /> </> ); }{/tabs-pane}{tabs-pane label="tasksReducer.js"}export default function tasksReducer(tasks, action) { switch (action.type) { case 'added': { return [ ...tasks, { id: action.id, text: action.text, done: false, }, ]; } case 'changed': { return tasks.map((t) => { if (t.id === action.task.id) { return action.task; } else { return t; } }); } case 'deleted': { return tasks.filter((t) => t.id !== action.id); } default: { throw Error('未知 action：' + action.type); } } } {/tabs-pane}{/tabs}Context Hook上下文帮助组件 从祖先组件接收信息，而无需将其作为 props 传递useContext 读取订阅上下文示例：import { createContext, useContext } from 'react'; const ThemeContext = createContext(null); export default function MyApp(){ return ( <ThemeContext.Provider value="dark"> <Form/> <ThemeContext.Provider> ); } function Form…

摘抄
type: item
date: 2025-10-24T10:02:00+08:00
description: {card-default label="刘震云" width=""}这个世界我们只来一次，百年之后，没你也没我 我们拼搏一生，带不走一砖一瓦 我们执着一生，带不走一丝爱恨情仇，人生苦短 所以吃你想吃的饭，见你想见的人，看你喜欢的风景，做你喜欢的事 人生本来就是一次减法，来日并不方长 有钱把日子过好，没钱把心情过好，时间扑面而来 我们终将释怀 平静的过，健康的活着 开心地笑，适当地忙碌 就很好 不要去责怪你生命中的任何人，合得来就好好相处，多多关怀，合不来就保持距离，装装糊涂 人在世上总会遇见形形色色的人，好的人给了你快乐 坏的人给了你经历，最差的人给了你教训，最好的人给了你成长 所有的相遇绝非偶然 来者要惜，去者要放 {/card-default}{card-default label="白日梦想家" width=""}认识世界，克服困难。洞悉所有，贴近生活。寻找真爱，感受彼此。这就是生活的意义。{/card-default}

TypeScript学习笔记
type: item
date: 2025-10-17T14:08:00+08:00
description: TypeScript入门笔记教程地址：官方文档：TypeScript 菜鸟教程：TypeScript入门教程简单介绍1、TypeScript由微软公司开发，是一种开源的编程语言2、TypeScript是JavaScript的超集，拓展了JavaScript的语法，因此，TS也是兼容JS代码的，只会对TS代码进行编译安装有两种主要的方式来获取TypeScript工具：通过npm（Node.js包管理器）安装Visual Studio的TypeScript插件这里采用npm的方式进行安装npm install -g typescript查看版本tsc -V 初始化一个项目tsc --init 基础语法数据类型布尔值let isDone: boolean = false;数字let decLiteral: number = 6; //十进制 let hexLiteral: number = 0xf00d; //十六进制 let binaryLiteral: number = 0b1010; //二进制 let octalLiteral: number = 0o744; //八进制字符串let name: string = "bob"; name = "smith";字符串除用"或'表示外，还可以使用模板字符串，可以定义多行文本和内嵌表达式，字符串由反引 号`包围，并且以${ expr }这种形式嵌入表达式let name: string = `Xiaohu`; let age: number = 37; let sentence: string = `Hello, my name is ${name}. I'll be ${age+1} years old next month;` console.log(sentence); //显示结果 Hello, my name is Xiaohu. I'll be 38 years old next month;SymbolSymbol 是 唯一且不可变 的数据类型，通常用作对象属性的键// Symbol 类型注解 const sym1: symbol = Symbol(); const sym2: unique symbol = Symbol("key"); // unique symbol 类型 // 作为对象属性 const obj = { [sym2]: "123" // 使用 unique symbol }; console.log(obj[sym2]); // "123"数组两种定义方式第一种在元素类型后面添加[]let list: number[] = [1, 2, 3];第二种使用数组放心，Array<元素类型>let list: Array<number>元组元组类型允许表示一个已知元素数量和类型的数组，各元素的类型不必相同let x: [string, number]; x = ['hello', 10]; // 正确 x = [10, 'hello']; // 错误当访问一个越界的元素，会使用 联合类型 替代x[3] = 'world'; x[4] = 100; console.log(x[5].toString()); //以上都是可以的, 字符串和数字都属于(string | number)类型,'string' 和 'number' 都有 toString x[6] = true; // Error, 布尔不是(string | number)类型联合类型一个变量是多个数据类型中的某一个，可以使用联合类型， 或 的关系function getArg(param: string | number) { return param.length }交叉类型一个变量是多个数据类型的总和，可以使用交叉类型， 与 的关系interface Person { name: string; age: number; } interface Employee { company: string; employeeId: number; } // BusinessPerson 必须同时拥有 Person 和 Employee 的所有属性 type BusinessPerson = Person & Employee;枚举enum类型是对JavaScript标准数据类型的一个补充，使用枚举类型可以为一组数值赋予友好的名字enum Color {Red,Green,Blue} let c:Color = Color.Green; console.log(c); //显示1默认情况下，从0开始为元素编号，也可以手动的指定成员的数值;枚举类型也可以通过值找到对应名字enum Color {R…

《被讨厌的勇气》读后感
type: item
date: 2025-06-17T10:04:00+08:00
description: 前言这是我第二次读完这本书，记得第一次读应该是23年那会儿，在地铁上，用微信读书看完了电子版。刚接触这本书时对我的冲击还是比较大的，里面的观点有点颠覆常识，但又让人觉得挺有道理的。可随着时间的流逝，很多东西都记不得了。前不久在B站刷到相关视频，就冲动买了一本，花了两周时间看完了（实际书的内容不算多，快的话一天就可以看完）。现趁着刚看完，把自己所接受到的东西写一写，当然这里也不是完全赞同书中内容，会放一些自己的思考。阿德勒心理学书中主要就是通过哲人和青年的对话来阐述阿德勒心理学，其中个人感觉读阿德勒心理学是非常刺痛的，它冷血地把人性进行解剖，将很多的责任或者原因归结到个人本身，而不是外界的条件，避免你下意识地找借口来逃避。勇气一词贯穿全书，人需要被讨厌的勇气，或者说直面这个客观的世界也是需要莫大的勇气。PS：弗洛伊德、荣格、阿德勒被称为心理学三巨头，前两位好像更加出名一点，梦的解析或者MBTI16型人格在互联网上传播更为广泛。“原因论”和“目的论”首先，阿德勒心理学的一个观点就是目的论——你是抱着某种目的让自己这样，书中否定了弗洛伊德的原因论——你现在的样子是由于过去的某一系列原因造成。乍一听，很反直觉。毕竟，这是一个讲逻辑讲因果的世界，人的种种行动都不可避免地受到各种因素的影响，但阿德勒心理学却说人都是抱有目的地让自己这样。不仅如此，人现在遇到的很多事情是痛苦的，但却被书中称为“善”，是对本人有利的。这不是很奇怪吗？但结合自己的经历和真实的内心想法，仔细想想，我确实是这样子的。生活中，我让自己痛苦的行为会让自己很舒服。拿我放弃考研举例子，如果从原因论来解释，可以解释通，我是一个心态不好的人，考研肯定会失败；我的父母年纪大了，读研还要花掉三年的时间，不如直接工作等等。也就是说，我放弃考研，是由多个因素造成的。责任不在于我。但是如果用目的论的角度，结果就比较直接了，我害怕考研的失败，害怕读研的辛苦，出于逃避的目的，所以产生了这一些所谓的原因。同时，当时的逃避，也为自己日后的心理安慰提供了方便，保留了一种可能性。当我咀嚼遗憾的时候，就可以相对轻松地想——只是我因为客观原因没有坚持而已，如果坚持下来也会有一个很不错的结果。目的论的好处相比于原因论，目的论是可以充分发挥人的主观能动性，也就是说排除掉一些客观无法改变的外界条件，人是可以自我改变的，并有极大的改变空间。相反，如果陷入原因论，即A->B，B->C,C->D ......,那么就有了一股决定论的意味，反而让人无法摆脱当前的痛苦，让人拥有了各种各样的推辞。目的论的缺点目的论同样也有危险。就是它过分强调了自身，而忽略了客观的世界。这个很容易让我联想到尼采所说的超人（overman），如果真的可以把所有的现状归结为自己的目的，那这个人的精神力量得多么的强大。事实上，我们需要认清，什么是可以改变的，什么是人无法决定的。盲目地将人置于高点，精神的崩溃是必然。认可欲求放弃对他人的认可欲求，其实就契合了本书的书名——被讨厌的勇气。我觉得自己一直活得很痛苦，因为我一直希望满足所有人的期待，得到周围所有人的认可。在亲戚邻居眼里，我努力优秀，在父母眼中，我孝顺懂事；在领导同事眼中，我认真踏实；但只有在无人的内心角落，才知道我是一个什么样的人，我懒惰、贪玩、会吃外卖，喜欢熬夜，一点也不自律，也会做很多不健康不积极的事情，只是无法坦率地在他人面前展现出来。我像是被众人架在火堆中烘烤，逼迫着展现出好的光泽，但我知道，终有一天，我将无法忍受这持久的炙烤，散发出焦糊的气味来。（多希望有那么一个人接受我的缺点，能让我展现出真实的自我，在一起轻松快乐，我也绝不会辜负她）。课题分离简单来说，课题分离就是做好自己的事情，既不去干涉别人的事，也不希望别人来干涉我。这与哲学上的斯多葛主义有异曲同工之妙，区分我们能控制什么与不能控制什么，来减少精神内耗。痛苦和焦虑主要源于我们试图去控制我们无法控制的事情，或者忽视了我们真正能够控制的东西如我们的内心和思想。理论很容易，但执行起来是非常的困难，就以书中孩子教育来举例，如果孩子贪玩，不好好学习，我相信绝大多数家长无法做到课题分离，即把学习这件事当成孩子自己的事情，而不去干涉。想要通过把马迁到河边，让马自己决定是否喝水，对于大部人人来说也是很难的，需要优秀的沟通能力和表达能力。我只做好我应该做的事情，别人怎么样，我不去管。这会让我们更容易专注在自己的事情上，而排除掉心中的杂念。自卑情结与优越情结自卑和优越并不是一体两面，而是在实际中可以相互转化。优越的人是最自卑的，他无法接受一个不完美的自己，所以内心就开始欺骗，幻想出自己的优越性来；自卑的人也是最优越的，因为他自卑产生的根源就是自大地觉得自己应该完美，或者说在某个方面应该不比某些人差。我自己就是一个自卑（自大）的人，别人收获幸…

【极客时间】玩转Git三剑客笔记
type: item
date: 2025-01-24T10:05:00+08:00
description: 第一章 Git基础1.1 课程综述版本变更管理 VCS的演化目录拷贝--> 集中式VCS（SVN） --> 分布式VCS（Git）Git优点：开源、性能好、存储优、方面备份、易于制定工作流程、支持离线操作1.2 安装Git安装地址：Git官网1.3 使用Git之前需要做的最小配置 最小配置 git config --global user.name 'your_name' git config --global user.email 'your_email@domain.com' config的三个作用域 git config --local 针对某个仓库（可缺省） git config --global 当前所有用的仓库 git config --system 系统所有登录用户 显示config的配置 git config --list --local 1.4 创建第一个仓库并配置local用户信息两种方式1、把已有的项目代码纳入Git管理 cd 项目代码所在的文件夹 git init 2、新建的项目直接用Git管理 cd 某个文件夹 git init your_project #会在当前路径下创建和项目名称同名的文件夹 cd your_project1.5 通过几次commit来认识工作区和暂存区 工作区 ==> 暂存区 ==> HEAD ==> 远端 add commit push/pull(fetch+merge) git add -u：添加文件的修改，文件的删除（只操作跟踪过的文件） git add . ：添加文件的修改，文件的新建 git add -A：添加文件的修改，文件的删除，文件的新建（全部文件） 工作中一般是用到 git add . 或者 git add -A（-all） 1.6 给文件重命名的简便方法 文件重命名： git mv oldName newName 大小写问题： git config core.ignorecase true1.7 通过git log查看版本演变历史ps： 对于git命令参数 如果单字母用-,如果单词使用-- git log --all 查看所有分支的历史 git log --all --graph 查看图形化的 log 地址 git log --oneline 查看单行的简洁历史 git log --oneline -n4 查看最近的四条简洁历史。 git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。 git help --web log 跳转到git log 的帮助文档网页1.8 gitk:通过图形界面工具来查看版本历史个人日常工作使用souceTree更多1.9 探秘.git目录 .git/ ├── HEAD # 指向当前分支的引用（如 `refs/heads/main`） ├── config # 仓库的本地配置（用户名、远程仓库等） ├── objects/ # 存储所有Git对象（提交、树、文件内容） │ ├── pack/ # 压缩后的对象包（优化存储） │ └── ... # 松散对象（未被压缩的单个对象） ├── refs/ # 存储引用（分支、标签、远程跟踪分支） │ ├── heads/ # 本地分支（如 `main`, `dev`） │ ├── tags/ # 标签（如 `v1.0.0`） │ └── remotes/ # 远程跟踪分支（如 `origin/main`） ├── index # 暂存区（Staging Area）的二进制表示 ├── hooks/ # 客户端/服务端钩子脚本（示例，默认未激活） ├── logs/ # 记录所有分支的提交历史（用于 `git reflog`） └── info/ # 全局排除文件配置（如 `.git/info/exclude`） git cat-file git cat-file -t 查看git 对象的类型 git cat-file -p 查看git 对象的内容 git cat-file -s 查看git 对象的大小1.10 commit、tree和blob三个对象之间的关系blob ==> tree ==> commit 享元模式：一种结构型设计模式，旨在通过共享对象来减少内存使用和提高性能，特别适用于存在大量相似对象的情况。享元模式的核心思想是将对象的内在状态（可共享的部分）与外在状态（不可共享的部分）分离，从而减少对象的数量。 1.11 小练习：数一数tree的个数可以简单的理解为commit是根节点，tree是子节点，blob是叶子节点，其中blob是可以共用的。1.12 分离头指针情况下的注意事项直接git checkout comm…

CTF竞赛学习（入门）
type: item
date: 2024-10-17T14:20:00+08:00
description: 起因本来凑数参加江苏金融监管局的金融业网络安全竞赛，但莫名其妙就进了决赛，可我们三个人纯门外汉，啥也不懂，公司领导为了不让决赛成绩太难看，请到了外面的某安全公司给我们培训CTF，当然一天速成，学到的东西估计也很入门偏概念，这里简单做个记录。CTF竞赛指南CTF简介CTF（Capture The Flag，夺旗赛）是一种流行于网络安全技术人员之间的一种信息安全技术竞赛。其前身是传统黑客之间网络技术比拼的游戏，以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。起源于1996年第四届DEFCON。现在已成为全球范围网络安全圈流行的竞赛形式。通常CTF分为三种赛制：解题赛（Jeopardy）、攻防赛（Attack-Defence）和混合赛竞赛模式基本分为解题模式、攻防模式和混合模式。大多题目的内容基本包括web安全，密码学、逆向、二进制安全编程类题目等国内外有很多CTF比赛。解题赛是线上赛通常采取的赛制，题目通常分为多个类型，如Web，Forensic（取证），Crypto（密码学），Binary（二进制）等。团队或个人可以通过解题获得一串具有一定格式的字符串，也就是flag。将flag提交到竞赛平台可以获得积分。题目的难度越大，分值就越高。当比赛结束后，得分最高者胜出。攻防赛是另一种有趣的赛制，常见于线下决赛。攻防赛中，每个队伍都会被分配一台主机或虚拟机，称为gamebox，队员可以通过网络连接到gamebox。而所有队伍的gamebox通过内网连接在一起。每个队伍的gamebox上都运行着多个相同的服务。参赛队伍需要挖掘服务的漏洞，然后攻击其他队伍的服务来获取flag，并提交给计分服务器来获取积分。与此同时，参赛队伍还需要修补自身服务中的漏洞来防止丢分。攻防赛不仅考验了参赛选手的技术水平，还考验了参赛者的体力，因为通常参赛者需要连续混合赛可能采取解题赛和攻防赛的混合模式，也可能是其他形式。WebOWASP基于web渗透测试选用到的手段，OWASP(开放式Web应用程序安全项目)所给出的web危险Top10基本上涵盖 了大部分，其中包含注入漏洞、中断身份认证、敏感数据泄露、xxe、中断访问控制、安全配置错误、xss、反 序列化、使用含有已知漏洞的组件、不足的记录和监控漏洞。注入漏洞失效的身份认证敏感数据泄露XXE失效的访问控制安全配置错误XXS不安全的反序列化使用含有已知漏洞的组件不足的日志记录和监控CSRFCSRF(Cross Site Request Forgery) 是指跨站请求伪造，是一种挟制终端用户在当前已登录的Web应用程 序上执行非本意的操作的攻击方法。攻击者只要借助少许的社会工程诡计，例如通过电子邮件或者是聊天软件发送的链接，受害者一旦点击链接，攻击者就能迫使受害者的浏览器在已经登录过的网站上去执行特定操作。CSRF攻击原理用户C打开浏览器，访问受信任网站A，输入用户名和密码请求登录网站A；2.在用户信息通过验证后，网站A产生Cookie信息并返回给浏览器，此时用户登录网站A成功，可以正常发 送请求到网站A；用户未退出网站A之前，在同一浏览器中，打开一个TAB页访问网站B；网站B接收到用户请求后，返回一些攻击性代码，并发出一个请求要求访问第三方站点A；浏览器在接收到这些攻击性代码后，根据网站B的请求，在用户不知情的情况下携带Cookie信息，向网站 A发出请求。网站A并不知道该请求其实是由B发起的，所以会根据用户C的Cookie信息以C的权限处理该请 求，导致来自网站B的恶意代码被执行。SSRFSSRF(Server-Side Request Forgery: 服务器端请求伪造)：是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下，SSRF攻击的目标是外网无法访问的内部系统。正是因为它是由服务端发起的，所以它能够请求与它相连而与外网隔离的内部系统。危险函数：fsockopen()file_get_contents()curl_exec()信息泄露信息泄露漏洞是由于web服务器没有正确处理一些特殊请求或者系统管理员对于应用设置及操作不规范，泄露服务器或者应用的敏感信息，如用户名，密码、源代码、服务器信息、配置信息、物理路径信息利用等。 该类信息的泄露容易造成恶意人员的利用，为达到进一步的攻击系统打下基础。目录遍历目录遍历漏洞是攻击者向web服务器发送请求，通过在url中或者在有特殊意义的目录中附加”../“、或者附 加”../“的一些变形（如“..”或“..//”甚至其编码），或类似的跨父目录字符串，完成目录跳转，读取操 作系统各个目录下的敏感文件。导致攻击者能够访问未授权的目录，以及能够在未授权的web服务器的根目录外执行命令文件上传文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。…

大数据技术入门学习（简单概念）
type: item
date: 2024-06-24T11:08:00+08:00
description: 前言最近公司上了数据中台（实际就是阿里的DataWorks私有化部署），给我们做了几次培训，这里把一些简单的概念列一下，对数据引擎有个初步的认识，重要的实操部分因为涉及到公司平台敏感信息，故不做截图演示。采用阿里的DataWorks大数据开发治理平台，基于MaxCompute/EMR/MC-Hologres等大数据计算引擎，提供专业高效、安全可靠的一站式大数据开发与治理平台，实现数据集成、数据开发、数据治理等一系列功能。离线数仓-MaxCompute一、定义MaxCompute（ODPS）是适用于数据分析场景的企业级SaaS（Software as a Service）模式云数据仓库，致力于批量处理结构化数据的存储和计算，提供海量数据仓库的解决方案及分析建模服务。二、优势集成性：支持跨平台数据整合及多组件兼容计算方面：支持大量、复杂批处理存储方面：海量数据存储（PB-EB）,支持弹性扩容三、限制不支持OLTP联机事务处理不支持交互式查询，任务执行延迟较大不持索引，Delete、Update操作受限四、与常见数据库对比MaxCompute技术架构定位与使用场景：MaxCompute，主要服务于批量结构化数据的存储和计算，应用于海量数据仓库建设，不支持事务； MySQL、Oracle等数据库，主打多维分析场景，支持事务；MaxCompute是列式存储，不支持Delete、Update等操作；Hologres是行式、列式存储，Oracle、MySQL是行式存储，可 以对单条数据进行删除、修改等操作；MaxCompute不支持索引、主键约束，无自增字段；Hologres、Oracle、MySQL可以设置约束，以及自增字段；MaxCompute是基于MapReduce进行数据的查询，速度相较于Hologres、Oracle、MySQL来说比较慢。MaxCompute在SQL语法上学习成本均比较低，SQL操作类似于Oracle、MySQL数据库。MaxCompute中的内建函数可兼容Hologres、Oracle、MySQL中的函数，部分存在写法的差异。如时间戳字段的月份、分 钟、小时函数一致，但在取系统日期的时候，MaxCompute可用getdate、 current_timestamp，Hologres中支持 current_timestamp，oracle中支持systimestamp、current_timestamp，MySQL中支持now等一站式实时数仓引擎-Hologres一、定义支持海量数据实时写入、实时更新。实时分析，支持PB级数据多维分析（OLAP）与即席分析（Ad Hoc Analysis是一种数据分析方法，它允许用户根据自己的特定需求和问题，即时地对数据进行查询、分析和探索。与预定义的报告或仪表板不同，即席分析提供了更大的灵活性，使用户能够深入挖掘数据，发现新的见解，并回答那些在分析开始时可能未预料到的问题），支持低延迟的在线数据服务（Serving）,与MaxCompute、Flink、DataWorks深度融合，提供在线一体化全栈数仓解决方案。二、优势：支持准实时快速数据写入及更新；支持OLAP多维分析查询；存算分离架构，支持动态按需扩容三、限制：稳定性上：目前官称99.9%，不如Oracle、OB等数据库稳定；功能上：OLAP分析型数据引擎，无事务保障机制，无触发器机制、无字段级联约束；应用场景上：主打多维分析场景，不建议使用在联机事务处理场景， 查询响应有一定延迟大数据集成调度平台-DataWorks一、定义基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎，为数据仓库、湖仓一体等解决方案提供统一的全链路大数据集成调度平台。二、优势集成性方面：一站式的数据工厂，集数据开发、分析、任务发布、 调度以及运维管理于一体监控管理方面：（1) 完备的数据质量监控体系； （2) 智能的监控告警； （3) 多租户的数据安全管理机制三、限制：调度时效性方面：涉及DataWorks槽位资源及MC资源队列排队 两级调度，对高频调度支持有限，一般建议小时级别以上调度频率数据节点依赖等原因，生产发布手工配置依赖四、模块计算存储引擎模块：MaxCompute、Hologress、OSS数据集成模块：组件全量/增量同步、实时同步数据开发模块：1）离线/实时任务：集成多种组件，支持一站式任务开发； 2）一站式的调度、监控、运维和告警

CTF-Crypto
type: item
date: 2024-06-09T11:09:00+08:00
description: 密码学（Cryptography）一般可分为古典密码学和现代密码学。一般来说，密码设计者的基本想法是确保密码框架的。保密性完整性可用性不可否认性其中，前三者又称为 CIA 三元组。古典加密古典密码是指在现代密码学发展之前使用的一类加密方法。它们通常基于简单的数学原理和替换、重排、置换等操作来对明文进行加密。置换学习视频 杨兰娟：古典密码-置换密码把明文中的字母重新排列，字母本身不变，但其位置改变了，这样编成的密码称为置换密码。栅栏技术：按照对角线顺序写出明文，并以行的顺序读出明文：meet after the toga party 栅栏数：2 m e a t r h t g p r y e t f e t e o a a t 密文： MEATRHTGPRYETFETEOAAT列置换：将明文按照行填写在一个矩形中，密文则是以预定的顺序按列读取生成明文：shesellsseashellsbytheseashore 密钥：351642 矩阵 3 5 1 6 4 2 s h e s e l l s s e a s h e l l s b y t h e s e a s h o r e 按照密钥顺序读取列，则为ESLHH LSBEE SLHYA EASSR HSETS SELEO周期置换：将明文串P按照固定长度m分组，然后对每组中的子串按照1,2,...m的某个置换重新排列得到密文。加密密钥（置换）K= 1 2 3 4 5 6 3 5 1 6 4 2 明文：shesellsseashellsbytheseashore 分块：shesel lsseas hellsb ythese ashore 根据函数f重新排列 以shesel为例 s->3 h—>5 e->1 s->6 e->4 l->2 最终顺序为ELSEHS,其他块也按照这个方法重新排列多次列置换：将列置换得到的密文再进行1次或多次列置换，方法与列置换一致替换学习视频 杨兰娟：古典密码-替换密码替换密码是将明文字符替换成其他字母、数字或符号。凯撒密码：将字母向后偏移3位，如果是移13位则为ROT13加密a->Db->E...x->Ay->Bz->C明文：attack 密文：DWWDFN维吉尼亚密码：基于串的替换密码，密钥是由多于一个的字符串所组成的串Ci = (Pi+ki mod m) mod 26明文：T H E B U T C H E R 密钥：B I G B I G B I G B 序号： 19 7 4 1 20 19 2 7 4 17 1 8 6 1 8 6 1 8 6 1 密文：UPKCCZDPKS弗纳姆密码：假定消息是长为n的比特串，密钥也是长为n的比特串m=b1b2...bn∈{0,1}nk =k1k2...kn∈u{0,1}n加密： Ci = Pi⨁Ki解密： Pi = Ci⨁KiPlayfair密码：1854 年由英国人查尔斯·惠斯通发明，基本算法如下：选取一串英文字母，除去重复出现的字母，将剩下的字母逐个逐个加入 5 × 5 的矩阵内，剩下的空间由未加入的英文字母依 a-z 的顺序加入。注意，将 q 去除，或将 i 和 j 视作同一字。将要加密的明文分成两个一组。若组内的字母相同，将 X（或 Q）加到该组的第一个字母后，重新分组。若剩下一个字，也加入 X 。在每组中，找出两个字母在矩阵中的地方。若两个字母不同行也不同列，在矩阵中找出另外两个字母（第一个字母对应行优先使这四个字母成为一个长方形的四个角。若两个字母同行，取这两个字母右方的字母（若字母在最右方则取最左方的字母）若两个字母同列，取这两个字母下方的字母（若字母在最下方则取最上方的字母）。新找到的两个字母就是原本的两个字母加密的结果。密钥：telegram 矩阵： T E L G R A M B C D F H I/J K N O P Q S U V W X Y Z 明文：NEXT TIME 分组：NE XT TI ME 画矩阵： NE--> HR XT--> VL TI--> LF ME--> HM希尔密码：希尔密码（Hill）使用每个字母在字母表中的顺序作为其对应的数字，即A=0，B=1，C=2 等，然后将明文转化为 n 维向量，跟一个 n × n 的矩阵相乘，再将得出的结果模 26。注意用作加密的矩阵（即密匙）在 $\mathbb{Z}^n_{26}$（我的markdown不支持latex） 必须是可逆的，否则就不可能解码。只有矩阵的行列式和26互质，才是可逆的。明文：ACT 矩阵： 0 2 19 密钥： 6 24 1 13 16 10 20 17 15 计算行列式发现不为0，可逆 明文矩阵乘密钥矩阵mod26得到密文矩阵 15 14 7 所以对应的密文为POH还有其他类型密码，这里简单列举一下，就不…