JS-逆向笔记
目录
json对象的序列化/反序列化
json.stringify 序列化
josn.parse 反序列化
date js的时间操作对象
new Date() # 当前标准时间
new Date('2020-09-22 16:49:32') # 指定时间
浏览器的储存
cookies # 主要用于服务器端通信,储存量小
Local Storage. # 储存量较cookies大,只能储存字符串
Session Storage. # 只存在当前,关闭浏览器丢失。与其他Local Storage一样
indexedDB # 相当于浏览器上的sql数据库,更大的储存空间,API较难掌握
JS-跨越
定义:客户端与不同源的服务端通信
解决方法
1.CORS
跨域资源共享,解决跨于请求的成熟方案
优点:成熟
缺点:有可能暴露端口,安全方面有一定风险
2.JSONP
基于<script>标签具有可跨域性,只能用于get请求
缺点:老的方式,只支持get请求,有很大的局限性
3.iframe
通过<iframe>标签在一个页面展示不同源的页面
通过PostMessage进行页面之间的通信
4.反向代理
通过反向代理让客户端与服务端保持同源
优点:安全,用nginx或者IIS对请求路由做反向代理,让静态资源与API是以同一个源达到跨域的目的,隐藏了后面的端口,安全性较高
Webpack打包
目的:将不同类型的源文件编译打包成静态文件
为什么要使用webpack:
1.前端技术多、乱、复杂,缺乏统一管理
2.大型项目需要模块化
3.对于例如JSX、TS之类的新技术需要编译后才能使用
通常采用babel作为javascript的编译器
页面加载完毕立即执行js
Window.onload = 函数名
页面加载前执行js,用于修改浏览器navigtor的指纹
result = await page.evaluateOnNewDowcument(js,*data)
console和$的用法
console.info. # 向控制台输出提示信息
console.error. # 向控制台输出错误信息
console.warn. # 向控制台输出警示信息
console.assert # 断言
console.log(data) # 以表格的形式展示data
$_ # 可以调用最后一次执行的结果
$('css选择器') # 单选
$$('css选择器') # all全选,返回的是数组
$x('xpath选择器')
JS自带base64 --btoa方法
window.btoa //查看btoa
btoa('123') // 123base64编码
自动执行函数
// 自动执行1
(function auto() {
console.log('自动执行')
})();
函数调用
//函数调用
function second() {
console.log(first());
}
function first() {
return "hello word"
}
second()
函数的定义3种方式
// 函数的定义-1
function say() {
return "定义函数"
}
// 函数的定义-2
var say = function () {
return "定义函数"
}
// 函数的定义-3
var obj = {
"say":function () {
return "对象内的成员"
}
}
Base64编码
内置函数btoa\atop 编码解码
// base64编码函数
// 内置函数btoa base64编码
let value = 'hello';
console.log(btoa(value)) //aGVsbG8=
// 内置函数atop base64解码
let value = 'aGVsbG8='
console.log(atob(value) // hello
借用第三方库实现base64,例如CryptoJS
// 借用第三方库实现base64,例如CryptoJS
const CryptoJS = require("crypto-js")
let value = "hello"
let trans = CryptoJS.enc.Utf8.parse(value)
let encrypted = CryptoJS.enc.Base64.stringify(trans)
console.log(encrypted) //aGVsbG8=
自定义Base64编码算法和解码算法
// 自己编写一套Base64编码算法和解码算法
function Base64() {
this.encode = function (val) {
//编码逻辑
return val
}
this.decode = function (val) {
//解码逻辑
return val
}
}
encrypt = new Base64()
console.log(encrypt.encode('encode'))
JSON与string相互转换
将JSON对象转换为字符串
// 将JSON对象转换为字符串
var params = {
"username":"jeff",
"password":"123456"
}
console.log(JSON.stringify(params)) // 字符串
console.log(typeof JSON.stringify(params)) //string
将字符串转换为JSON对象
// 将字符串转换为JSON对象
var params = "{\n" +
" \"username\":\"jeff\",\n" +
" \"password\":\"123456\"\n" +
"}"
console.log(JSON.parse(params))
console.log(typeof JSON.parse(params))
Array数据基本操作
// Array 基本操作
// 数组,验证码轨迹常见
// 定义一个空数组
let mousePos = new Array()
//向数组添加元素
mousePos.push([1,2,3,5555])
console.log(mousePos)
//删除并返回一个元素
console.log(mousePos.pop())
console.log(mousePos) //空数组
// 数组转字符串
let mousePos = new Array()
mousePos.push([1,2,3,5555])
mousePos.push([1,2,3,5555])
mousePos.push([1,2,3,5555])
mousePos.push([1,2,3,5555])
mousePos.push([1,2,3,5555])
console.log(mousePos.join(";")) //拼接
console.log(mousePos.toString()) //转字符串
ASCILL码与字符串相互转换
// 字符串转ascill
let value = String.fromCharCode(72,69)
console.log(value)
// ascill转字符串
let value2 = 'j'
console.log(value2.charCodeAt())
toSting
//对象转字符串
let param = [1,2,3]
console.log(param.toString())
// // 字符串转二进制
let value = 6
console.log(value.toString(2))
//
// // 字符串转十六进制
let value = 17
console.log(value.toString(16))
// 布尔值转字符串
let value = false
console.log(value.toString())
// 判断类型
let arr = [1,2,3]
console.log(toString.call(arr))
选择了IT,必定终身学习