想知道如何消灭跨站点请求伪造漏洞?
Posted lingdaima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想知道如何消灭跨站点请求伪造漏洞?相关的知识,希望对你有一定的参考价值。
Map基础梳理
javascript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。为了解决这个问题,ES6 提供了 Map
数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object?
结构提供了“字符串—值”的对应,Map
结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
例如Map构造函数接受一个数组作为其参数:
const map = new Map([
[1, ‘网通‘],
[2, ‘电信‘]
]);
// 0:{1 => "网通"}
// 1:{2 => "电信"}
Map
实例的属性和操作方法:
size
:返回成员总数set(key, value)
:添加新的键值get(key)
:读取键对应的值has(key)
:是否有某个键delete(key)
:删除某个键clear()
:清空
Map
实例的遍历方法:
数组去重(Map):
去重前:[1,5,2,3,4,2,3,1,3,4]
去重后:[1,5,2,3,4]
主要思路:创建一个空Map
,遍历原始数组,把数组的每一个元素作为key
存到Map中,因为Map
中不会出现相同的key
值,所以最终得到的Map
中的所有key
值就是去重后的结果。
function unique(arr) {
let hashMap = new Map();
let result = new Array(); // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if(hashMap.has(arr[i])) { // 判断 hashMap 中是否已有该 key 值
hashMap.set(arr[i], true); // 后面的true 代表该 key 值在原始数组中重复了,false反之
} else { // 如果 hashMap 中没有该 key 值,添加
hashMap.set(arr[i], false);
result.push(arr[i]);
}
}
return result;
}
let arr = [1,5,2,3,4,2,3,1,3,4];
console.log(unique(arr)); // [1,5,2,3,4]
**************************************************************
unique = (array) => {
let map = new Map();
let result = []
for (let i = 0; i < array.length; i++) {
if(map.has(array[i])) { // 判断 map 中是否已有该 key
continue
} else { // 如果 map 中没有该 key,就加入 result 中
map.set(array[i], true);
result.push(array[i]);
}
}
return result;
}
Set:代码最少
function unique (arr) {
return Array.from(new Set(arr))
}
let arr = [1,5,2,3,4,2,3,1,3,4];
console.log(unique(arr))
//[1,5,2,3,4]
let arr = [1,5,2,3,4,2,3,1,3,4];
[...new Set(arr)]
//[1,5,2,3,4]
借鉴计数排序的原理
unique = (array) => {
const hash = []
for(let i=0;i<array.length; i++){
hash[array[i]] = true
}
const result = []
for(let k in hash){
result.push(k)
}
return result
}
缺点:只支持数字或者字符串数组,如果数组里面有对象,比如 array = [{number:1}, 2]
,就会出错。
以上是关于想知道如何消灭跨站点请求伪造漏洞?的主要内容,如果未能解决你的问题,请参考以下文章