日常问题杂记


HTML

section标签 页面分页
sub标签 下标
audio标签 音频
video标签 视频

HTML 代码展示相关标签
显示行内代码

<p>JavaScript 中可以使用<code>forEach()</code>函数对数组进行遍历</p>

结合

(保留格式)显示代码块:

里边的文本顶格写可以防止前边有空格

<pre>
<code>
let a = 10;
let b =5;
console.log(a + b);
</code>
</pre>

程序输出可以使用 显示

<samp>
output:15;
</samp>

post 新增实例

put 替换(修改)实例

patch 修实例中的属性

head 与get类似,响应中没有body

connect 用于资源与服务器建立隧道

options 获取服务器允许使用的HTTP verbs

trace 调试信息

安全性:get

幂等性(多次请求等同于一次请求):get,put,delete

是否缓存:get,post,patch

javascript

2==“2”; //true,先尝试类型转换

2===“2”; //false,严格比较,类型不匹配

let n=null; //空

let un=undefined; //可以赋值为undefined

switch(a){
case 1:
    //操作
    break;
case 2:
    //操作
    break;
default:
    //操作
}
a>5?"大于5":"小于或等于5"
//数组
let arr=[1,2,3]
arr.push(4);    //[1,2,3,4]
arr.unshift(4);    //[4,1,2,3]
arr.pop();    //3
arr.shift();    //移除数组头部元素:1
arr.forEach((e,i,arr)=>{
    console.log(e);
})    //e:当前元素;i:索引;arr:数组本身 
let arr2=arr.map(e=>e*2);    //[2,4,6]
let arr3=arr.filter(e=>e>2);    //[3]
//解构赋值
let [a,b]=[1,2,3];
console.log(a,b);    //1,2
let [a,b]=[1, ,3];
console.log(a,b);    //1,3
//spread运算符
let arr4=[...arr];    //[1,2,3]
for(let e of arr){
    console.log(e);
}    //1,2,3

//对象
let obj={a:1,b:2,c:3}
let {a,b}=obj;    //a,b的名字保持与对象的属性名一致
console.log(a,b);    //1,2
//spread运算符
let obj2={...obj}    //{a:1,b:2,c:3}
//rest运算符
let {a,...rest}=obj;
console.log(a,rest);    //1,{b:2,c:3}
for(let p in obj){
    console.log(p,obj[p]);
}
//a 1
//b 2
//c 3
let date=new Date();
console.log(date.getFullYear());    //2024
console.log(date.getMonth())    //月份从0到11
let id=setInterval(()=>{
    console.log("hi");    
},5000);    //每隔5秒执行一次
clearInterval(id);
//promise API
fetch("https://api").then((res)=>res.json()).then(result=>{console.log(result)}).catch(e=>console.log(e));

文档流

normal flow

修改文档流

display,multi-column,float,postion

<!-- 对移动设备开启响应式 -->
<meta name="viewport"
content="width=device-width,initial-scale=1.0">

字体大小单位:rem,vw,em

长度单位:px,%,fr(浮动宽度)

图片单位:px,w

ESLint

解决编写代码时,无法发现错误

node.js包管理工具:yarn,npm

yarn init -y

npm init vue@latest

javascript是Web页面的脚本语言,主要用来向HTML页面添加交互行为,有以下几个作用
1、嵌入动态文本于HTML页面
2、对浏览器事件做出响应
3、读写HTML元素
4、在数据被提交到服务器之前验证数据
5、检测访客的浏览器信息

1、JS中存在插件名字,根据插件找到相应的漏洞直接利用
2、JS中存在一些URL链接,根据URL链接找到相应的页面进一步测试和利用
3、JS中存在一个子域名,可以直接访问子域名
4、JS中的一些注释可能泄露以账号密码或者其他的

使用Jsfind JS中泄露的url链接和域名
python JSFinder.py -u “https://www.jd.com/"

function wanli(message){
var a =message;
a=a+”adsfdsaf”;
return a;
}
import execjs
with open(“1.js”) as f:
a=execjs.compile(f.read())
result=a.call(‘wanli’,”123”)
print(result)

安全措施

1.数据传输加密(ssl/tls)
2.输入验证和过滤
3.访问控制和权限管理
4.安全编码
5.扫描漏洞和安全测试

外网bug如何跟进
LQA(我们的内部工具)——该工具能够检测国际化错误(多余空格、错误引号、无效日期格式等)

  • EFIGS:英语、法语、意大利语、德语和西班牙语(欧洲和拉丁美洲)
  • 俄语
  • CCJK(简体中文、繁体中文、日语和韩语)
  • 葡萄牙语(巴西)

chrome断点调试

elemnets定位->‘+’按钮,点击->elements下的event listeners->查看点击事件->进入js函数->打断点(继续运行到下一个断点;断点下一行;进入断点;退出断点;断点禁用)->scope(局部变量和全局变量),watch(变量的简单运算)

+inputs[0].value相当于将输入的字符串转化为数字

console
default levels:

Default Verbose Info Warnings Errors

1.打印调试信息

console.debug(‘God bless me!’);
2.打印消息

2.1 普通消息

console.log( ‘hello console’);
// 2.2 信息(在chrome总log和info一样,在safari中,info前有‘i‘标识)
console.info(‘night gathers’);

//2.3 表格

console.table({first:’Rene‘,last:'Magritte’,},{first:’Chaim’,last:’Soutine’,birthday:18938113,},{first: ‘Henri’,last:’Matisse’,},])

2.4 分组
const.label=’Package elephant’;

console.group(label);

//console.groupCollapsed(label); //默认折叠

console.log(’0pen·box’);

console.log(‘Put·elephant·in’);

console.log(‘Close·box’);

console.groupEnd(label);

//2.5 对象结构
console.log(document.body); //展示的是元素结构

console.dir(document.body); //展示的是对象结构

//2.6 计时
console.time(‘loop’);

const start = Date.now();

while(Date.now()-start<2000){}

console.timeEnd(‘loop’);

//2.7 计数

const start = Date.now();

while(Date.now()-start <20){

​ console.count(‘loop’);

}

console.countReset(‘loop’),

//2.8 堆栈

function b(){

​ console.trace();
}

function a(){

b();

}

a();

//断言

function sum(a,b){

return a*b;

}

console.assert(sum(1,2)===3);

//警告和断言
console.warn(‘Abandon Hope All Ye Who Enter’)
console.error(‘You has made a huge mistake!’),

//给消息添加样式

const styles =padding:5px;background-color:#98442E;color:white;font-style: italic;border:5px solid #E06E3C;font-size:2em;;

console.log(‘%cVariety is the spice of life’,styles);

DNS

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。如图所示树的最大深度不得超过127 层,树中每个节点都有一个可以长达63 个字符的文本标号

dns的分类
主DNS服务器:就是一台存储着原始资料的DNS服务器。
从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。
缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。
转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

dns域名解析过程
首先,客户端先在本地缓存查找有没有域名缓存,如果没有,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息

dns命名规范

  1. 26个英文字母
  2. “0,1,2,3,4,5,6,7,8,9”十个数字
  3. “-”(英文中的连词号)
  4. 最多63字节长度

Host命令也是大多数系统、软件库调用的解析命令,比如php中
host baidu.com
Nslookup能够反映出是哪个dnsserver返回的结果
nslookup baidu.com

Dig返回整个解析过程的详细路径,类似traceroute
dig traceroute

dns中递归查询与迭代查询的区别
1.递归查询:
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机

2.迭代查询(反复查询):
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;

 

以一个dns请求解析为例:
1、用户发起域名请求到dnsA,这时dnsA有这个记录,将结果返回给用户,这个过程是递归查询
2、用户发起域名请求到dnsA,这时dnsA没有这个记录,他去向dnsB问有没有这个记录,以此类推,直到把结果返回给用户,这个过程是递归查询
3、用户发起域名请求到dnsA,这时dnsA没有这个记录,他告诉用户,我没有这个记录,你去问dnsB吧,这个过程是迭代查询

免费域名:
us.kg
cloudns.be
PSL(公共后缀列表)

Content-Type可以指定多种不同的数据格式。例如,
text/html表示内容是HTML文档;
text/plain代表纯文本内容;
application/json和application/xml分别表示JSON和XML格式的数据
。对于图像和文件下载,有如
image/jpeg、image/png和application/octet-stream等格式。
当涉及到Web表单时,
application/x-www-form-urlencoded和multipart/form-data这两种格式分别用于标准的表单提交和文件上传的情况

怎么识别爬虫并且采取自动封禁策略?
1:Robots.txt文件协议
2:增加获取数据条件(要登录)
3:统计访问频率(单实例子网关用map,多实例用分布式缓存,redis,本地缓存caffeine)和请求 ip,定时内超过固定次数,分级告警策略
4:开源数据,溯源查询来源

windows命令行工具

CMD命令提示符:运行win命,脚本语言cmd.bat
PowewrShell:运行win命令+cmdlet命令,脚本语言powershell.ps1(.net语言编写,命名:动词+名词)
可使用Linux命令,Get-Alias查所有别名
cd->Set-Location
ls->Get-ChildItem
筛选CPU占用率最高5个进程:Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
获取所有支持的命令:Get-Command
更新文档:Uplate-Help
导出csv文件为test.csv文件: ps | export-csv -Path test.csv
导出html格式:ps | convertto-html > test.html

WSL:Windows上的Linux子系统
1:开启cpu虚拟化,任务管理器中性能中查看
2:搜索”windows功能”,勾选使用于Linux的Windows子系统
3:管理员运行cmd
查看在线
wsl –list –online
输入:wsl –install –web-download,默认安装Ubuntu
wsl –install kali-linux –web-download
查看有哪些wsl
wsl –list -v
设置默认使用
wsl –set-default kali-linux
进入Ubantu
wsl -d Ubantu
退出exit
卸载
wsl –unregister Ubantu
备份
wsl –export Ubantu ubantu.tar
导入
wsl –imort ubantu.tar D:/wsl C:\Users\21173\Desktop\ubantu.tar
文件共享
windows powershell:
查看挂载点
df -H
win使用记事本打开文件
notepad.exe test.txt
文档器查看当前文件
explorer.exe .
查询当前子项目中的视频
Get-ChildItem | wsl grep Video

WSLg
显卡直通
nvidia-smi
在kali-linux中
sudo apt install kali-win-kex
kex –esm –p -sound
Hyper-V管理器,类似于VMware Workstation

sqlite

官网下载:sqlite-tools-win-x64-3460000.zip-》打开exe可执行文件-》输入:.open newDatabase.db-》create table…-》insert…-》select…
适用于单用户客户端
微信:PyWxDump,用于读取本人微信的数据库内容
https://github.com/xaoya00/PyWxDump/blob/master/doc/wx数据库简述.md
留痕(导出微信聊天记录):https://github.com/LC044/WeChatMsg

常用概念

IEEE 是什么意思? 国际电气电子工程师协会
GB 是什么意思?国家标准
pareto 法则、帕累托法则、28 原则、82 原则 一般情况下 80%的缺陷聚集在 20%的关键核心业务模块中,这个原则至少告诉我们在做 测试时,应该重点分析和测试 20%的核心业务,具体说要做好需求分析。
杀虫剂怪事 杀虫剂怪事用于描述软件测试越多,其对测试的免疫力越强的现象。
Good-enough 原则 Good-enough 原则告诉我们做测试的时候既不要做过多测试也不做不充分的测试。至 于多少测试合适,需要我们不断积累经验
什么是 BVT?冒烟测试?版本验证测试?怎么测? 也称冒烟测试、版本验证测试小版本验证测试、版本构建测试。冒烟测试用例是一组 想先运行以确定这个给出的小版本是否可以测试的测试用例。冒烟测试主要测试软件的基本 功能,以判断整个软件值不值得进行大规模测试。通常由一个人进行 1-2 小时的测试,一般 不测试次要功能和各种错误。
什么是 alpha、beta 测试?有何区别? Alpha 测试:潜在的客户/用户在开发场地进行的测试。 Beta 测试:由潜在客户/用户在自己的环境下测试软件系统
SP2 什么意思?第2个版本的服务包或补丁包

SEO(search engine optimization)
砸米,关键词(keywords,description),网页结构(一级标题),友情链接,缩小网站层极,主动给搜索引擎推送(网页根目录下的rebots.txt中指定sitemap.xml/单个链接),主动推送动态的sitemap.xml
SSR(服务端渲染):服务器向后端发送请求去拼接数据,得到完整的页面再返回前端
SSG(静态网站生成)
提前生成静态网站页面放在服务器,前端请求时服务器直接打开静态html
使用场景:数据量比较少(个人博客:hexo,VuePress,Hugo)

在requests做请求的时候,为了避免ssl认证,可以将verify=False,但是这么设置会带来一个问题,日志中会有大量的warning信息
原因分析:将verify=False,会带来一个问题:日志中会有大量的warning信息!
解决办法:如果想把这些报错信息去掉,只需要在请求的地方加上requests.packages.urllib3.disable_warnings():

from requests.packages import urllib3
urllib3.disable_warnings()
再次执行就不会有报警告了。

@gemini 与Gemini聊天
下载youtube的视频,youtubeq前面加9x
www.9xyoutube.com/watch:v=xxxxxxXX

  1. 寻找资产
    在进行edu漏洞挖掘的时候,我们常常遇到统一认证平台,账号是学号,密码是身份证后6位(甚至是更复杂的密码),同时找到这两者的几率很小,所以我们把关注点放在微信小程序中,因为微信小程序存在一键授权登录,不需要本校学生的学号和密码(小部分),这里我们找学校的小程序,直接搜索大学,职业学院等字样

骚思路1
仔细观察数据包,原路径是这样的,猜测开发人员的思路,在后面添加/list,可能存在
原路径/prod-api/system/info/small/userId修改后的路径/prod-api/system/info/small/userId/list
修改后的返回包

可以看到并没有,这个这个路径,那这样就放弃了吗?显然是不可能的,删除前面的路径,当删到info时,直接回显了,其他人的实名认证的信息,而idPhoto,就是sfz存在的地址,太敏感所以这里不放出来了
/prod-api/system/info/list

骚思路2
默认只有10条信息,想要获取更多的数据信息,观察其他的数据包,发现他们控制输出内容的参数是?pageNum=1&pageSize=100,直接拼接

骚思路3
继续思考,将info改为user,发现显示管理员的信息
/prod-api/system/user/list

import sys
import site

#打印Python解释器的安装路径

print(sys.executable)

#打印所有已知的路径,包括安装路径

for path in sys.path:
    print(path)

#打印site-packages目录的路径
print(site.getsitepackages())

npm报错:request to https://registry.npm.taobao.org failed, reason certificate has expired
原因:npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 registry.npmmirror.com。旧域名也将于 2022 年 5 月 31 日停止服务(不过,直到今天 HTTPS 证书到期才真正不能用了)
解决方案

1、查看当前的npm镜像设置:npm config list

2、清空缓存:npm cache clean –force

3、然后修改镜像即可:npm config set registry https://registry.npmjs.org/ (或npm config delete registry)
!!!注意:此处修改的镜像用的是npm本身,一般国内用户还是建议使用淘宝镜像,所以推荐还是设置成用淘宝镜像,执行:npm config set registry https://registry.npmmirror.com 【推荐】
4、关闭cmd窗口,再次运行: npm config list,查看 registry 已经被更改为默认的 npm 公共镜像地址

npm install –save hexo-pdf

{% pdf ./bash_freshman.pdf %}

yarn安装模块报错:The engine ‘node’ is incompatible with this module
主要是因为 nodejs 版本冲突了,所以使用 yarn 命令在进行版本检查时报错。

二、解决办法
忽略引擎版本检查,设置 ignore-engines=true 修复版本不兼容的问题。执行以下命令:
yarn config set ignore-engines true
再次使用 yarn 来构建、下载安装就畅通无阻

进入本地项目目录

cd path/to/your/project

初始化git仓库(如果你还没有)

git init

添加所有文件到git仓库

git add .

提交更改到本地仓库

git commit -m “Initial commit”

添加GitHub仓库为远程仓库(替换YOUR_USERNAME和YOUR_REPO为你的GitHub用户名和仓库名)

git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO.git

推送代码到GitHub(默认推送到master分支,如果你使用的是main分支则需要相应地修改命令)

git push -u origin master
问题:
Github:remote: Invalid username or password
执行命令后,git会弹出一个GitHub登陆的小界面,你登录成功后要求你输入用户名和密码。这里的密码并不是你的GitHub的密码或者本地git的密码。
而是GitHub的Personal access tokens
密码重新填写后。完美解决问题
从现在起,只要本地作了提交,就可以通过如下命令:git push origin master
把本地master分支的最新修改推送到github上了

git远程库回退版本
1:查看git历史记录
git log
2:找到指定的提交
git checkout commitID

  • commitID是你提交的ID,这个命令会将代码库状态切换到指定的提交。主要用来看之前的代码
    如果想将改动记录添加到当前分支,而不仅仅是切换到旧版本,可以使用。主要用于切回以前正确的代码,并添加修改
    git revert commitID

3:将更改推送到远程库
git push origin master

  • 这里的master,为你的当前的分支名称

分层领域模型规约:POJO
前端:请求
后端:控制层、业务层、数据访问层、数据库

表和类对于->PO/DO(data object):此对象与数据库表结构一一对应

前端请求后端->DTO->后端业务逻辑处理->BO

VO<-后段响应给前端

DNS查询使用UDP协议(明文传输) -》抓包修改导致DNS污染

DoT(DNS over TLS) 端口:853
DoH(DNS over HTTPS) 端口:443
设置DoH:windows中,网络和Internet->硬件属性->编辑DNS设置->首选DNS:233.5.5.5(阿里公开DNS)->设置DNS over HTTPS模板:https://223.5.5.5/dns-query

SNI(server name indication)服务器名称指示
抓包获取客户端请求证书的sni导致SNI阻断
wireshark过滤栏输入:_ws.col.info==”Client Hello (SNI=github.com)”
找到Extension:server_name(len=15) name=github.com

ESNI(Encrypted SNI)加密SNI

ECH(Encrypted Client Hello)
查看自己的浏览器是否开启ECH:https://tls-ech.dev/

HTTP/3 (HTTP over QUIC)建立在UDP上的可靠传输协议
识别开源项目:在Filters中,is:issue sort:comments-desc

编码格式:
美国:ASCII、欧洲:ISO 8859、中文:GB2312、繁体:Big5、日文:Shift JIS
Unicode
浏览器指纹:
ip地址、字体、cavans(绘制图片区域:画布)、时区、user agent、浏览器插件、地理位置、webGL(JavaScript api 收集显卡信息)、AudioContext(声音指纹)
开启无痕模式,通过浏览器指纹,依然可以知道用户身份

正则表达式:https://regexr-cn.com/
https://regex-vis.com/

github-action:
CICD流水线编译部署打包
Fork项目-》构建Windows可执行程序:actions-》run work flow-》结束后查看结果-》Artifacts-》下载
其他人写好的action:https://github.com/marketplace/

Watt Tookit(Steam++)
报错443端口被占用
cmd查看哪个pid占用443
netstat -ano | findstr :443
在任务管理器中,详细信息,搜索pid,结束任务

彻底擦除文件
cipher /w:D:
原理:使用一个巨大的临时文件覆盖磁盘空间,使已删除的文件再也无法恢复。
文件加密(ecrypt)
cipher /e C:\Users\21173\Desktop\test.txt
cipher /e /s:C:\Users\21173\Desktop\文件夹\

文件解密(decrypt)
cipher /d C:\Users\21173\Desktop\test.txt

ICMP协议
测试网络连通性
通,告诉延迟
不通,用icmp包里的type+code,两个数字的组合,代表故障原因
1:没配网关-》传输失败,常见故障
2:配了网关,但找不到网关-》来自本机的回复,无法访问目标主机。自己发arp寻找网关mac,失败
3:配了网关,也能找到网关-》来自网关的回复,无法访问目标网络。网关设备缺少路由
4:配了网关,也能找到网关,网关也有目标路由。但是后面的设备缺路由。
4.1:后面的设备,有回包的路由,没有目的地的路由。报错:来自缺路由的设备,无法访问目标网络。
4.2: 后面的设备,没有回包的路由,没有目的地的路由。超时

icmp,type+code含义
8+0 代表是一个ping请求
0+0 代表是一个ping回应
3+0 缺路由,所以不通
3+1 不缺路由,缺arp
11+0 TTL没了,丢包了

查看公网IP
curl ipinfo.io

连接过的WiFi密码
netsh wlan show profiles
netsh wlan show profiles name=”wifiname” key=clear

IE浏览器
新建文件,输入
Create0bject(“InternetExplorer.Application”).Visible=true
保存,改后缀.vbs
双击运行

绕过强制登录
Shift+f10,调出cmd命令提示符,输入
oobe\bypassnro
重启

修复系统文件
sfc /scannow

RSS(Really Simple Syndication简单信息聚合)
在这个资讯爆炸的时代,RSS可以极大提高信息收集效率,它还可以摆脱算法推荐,打破信息茧房,重新做信息的主人而不是奴隶
RSS阅读器 Fluent Reader:https://github.com/yang991178/fluent-reader
RSS阅读器手机版 :https://github.com/yang991178/fluent-reader-lite
RSSHub:https://rsshub.netlify.app


文章作者: 读序
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 读序 !
  目录