javascript原型链污染漏洞
基础知识对prototype和__proto__的区分个人对两个概念的理解 prototype存在的意义?疑问来自于:prototype是每个函数的模板,储存了函数的属性和方法,那为什么我们不可以直接在函数中加上方法属性,为什么非要如下对构造函数进行书写呢: 123456789function Person(name){ this.name = name;}Person.prototype.sayhello = function(){console.log("hello");}; const Bob = new Person("Bob");const Alice = new Person("Alice");Bob.sayhello();//此时Bob和Alice都会继承父类Person的prototype里的方法以及自带的name属性。 解答:若是按照如下书写,不使用prototype: 12345678910function Person(name){ ...
javascript概念类比解析
将javascript中的相关概念类比于Python中的相关概念 对象 (Object)JavaScript 定义:无序的数据集合,由键值对组成,使用对象字面量 {} 或构造函数创建。 1234const person = { name: "Alice", greet: function() { console.log("Hello!"); }}; Python 定义:Python 中一切皆对象,包括基本类型(如整数、字符串)和自定义类型。 1234person = { "name": "Alice", "greet": lambda: print("Hello!")} 类比关系 JavaScript 对象 ≈ Python 字典(dict)或自定义类的实例。 实例...
js特殊封装函数
e()计数器具体情景1234567const yn = (t, e, r) => { e(e() + 1); // 每次点击计数器+1 e() % 50 == 0 && // 当计数器是50的倍数时才发送请求 vn.post(r, { json: { type: "set", point: { amount: e() } } // 发送的数据格式 }).json()} 这里的e()到底是怎么用的,我不清楚,我们可以类比如下python代码。 类比代码123456789101112131415class BankAccount: def __init__(self): self._balance = 0 # 真实余额藏在内部 @property def balance(self): # 相当于 e() return self._balance ...
javascript学习
声明 var变量声明,通俗来说会将变量上升到上级代码块的变量范围中。这里的上级代码块详细来说应该是当前函数作用域或者全局作用域,因为在 JavaScript 里,只有函数和全局作用域能够限制var变量的作用域,像if语句、for循环、while循环等代码块是无法限制的。比如:无法限制var作用域的情况: 1234if(true){ var x = 5;}console.log(x);//x的值为5 可以限制var作用域的情况: 12345678function example() { if (true) { var x = 5; // 实际上会被提升到函数顶部 } console.log(x); // 可以访问 x,输出 5}console.log(x); // 报错:ReferenceError(x 不在全局作用域,因为function将其限制) 函数函数定义与声明二者区别函数声明(Function Declaration)123function add(a, b) { ...
request库笔记
详细系统知识可见菜鸟教程:requests库 同时传入GET和POST请求 错误范例: 123456import requests#略....response_post = requests.post(url,data = data)response_get = requests.get(url, params = params)#略.... 这样会让两个请求分次发送,比如以下后端代码: 123456$file = $_GET['file'];$content = $_POST['c'];if issert($_GET['file']){ printf($file); printf($content);} 如果按照第一个python脚本的请求发送方式,第一次只传达了get请求而未传递post请求,则$_content值为空。 正确范例: 1234import requestsresponse = requests.post(url, params=params,...
文件包含:伪协议加密绕过die函数
基础知识 rot13编码:即将字符化为ascii🐎后,将其增加13,重新使用chr化为字符,但是注意在实际编写代码的过程中别把超出范围的ascii🐎也给记下来。如下为简易的rot13转码脚本 1234567891011def rot_13(content): new_content = [] for s in content: if s.isalpha(): if s.islower(): new_content.append(chr((ord(s)-ord('a')+13)%26+ord('a'))) else: new_content.append(chr((ord(s)-ord('A')+13)%26+ord('A'))) else: new_content.append(s) return...
Linux重定向符绕过
基本概念 关于重新定向符详细解释可参考该篇文章:Linux重定向 简单来说,重新定向符的作用为: 分为覆盖写入以及追加写入两种写入方式,分别用两种符号表示:<,<< 尖的头头代表输出/输入的对象,判断输出输入流,另一侧,符号的”嘴部”后的数据,我们可以判断该数据/指令是用于输出指令还是用于对一个对象进行输入的准备材料。通过这样的判断,我们可以来区分该重定向是输入还是输出。 具体实例可以看我放的博客传送门。 关于错误重定向:典型代码有: 122>&12>>&1 从上到下分别是覆写和追加标准错误输出到标准输出,这里都是在对输出流进行操作。 关于为什么有时不写分号: 1ls -a >/dev/null 2>&1 我们需要明确,在这行代码中,2>&1也是命令的一部分,和前面的ls -a属于一部分,所以中间不需要分号分割。 通俗介绍重定向符 通俗解释在 Linux 等系统中,每个进程默认会有三个数据流:标准输入(stdin,文件描述符为...
命令执行:或运算符脚本绕过
基本概念 基本思路:首先关注该题过滤的符号: 12345678910<?phpif(isset($_POST['c'])){ $c = $_POST['c'];if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){ eval("echo($c);"); }}else{ highlight_file(__FILE__);}?> 可见该题未过滤或符号|和空格。所以我们可以使用或运算符|,利用url编码的字符通过或运算符计算获取目标字符,进而实现绕过正则匹配。 关于eval执行的机制:如下代码也可以被eval执行: 12$a =...