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))
posted @ 2020-09-23 11:48  Jeff的技术栈  阅读(380)  评论(0编辑  收藏  举报
回顶部