明:
该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关
一、瑞数简介
瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。
二、瑞数特点
三、瑞数5特点
四、找出需要加密的参数
五、瑞数5 cookie 分析
六、补环境
// 代理器封装
function getEnv(proxy_array) {
for(var i=0; i<proxy_array.length; i++){
handler=`{\n
get: function(target, property, receiver) {\n
console.log('方法:get',' 对象:${proxy_array[i]}',' 属性:',property,' 属性类型:',typeof property,' 属性值类型:',typeof target[property]);
return target[property];
},
set: function(target, property, value, receiver){\n
console.log('方法:set',' 对象:${proxy_array[i]}',' 属性:',property,' 属性类型:',typeof property,' 属性值类型:',typeof target[property]);
return Reflect.set(...arguments);
}
}`;
eval(`
try{\n
${proxy_array[i]};\n
${proxy_array[i]}=new Proxy(${proxy_array[i]},${handler});
}catch(e){\n
${proxy_array[i]}={};\n
${proxy_array[i]}=new Proxy(${proxy_array[i]},${handler});
}
`)
}
}
// proxy_array=['window', 'document', 'location', 'navigator', 'history','screen','target' ]
// getEnv(proxy_array)
module.exports=getEnv
七、python代码验证结果
八、最终代码
delete __dirname
delete __filename
var getEnv=require('./jsProxy')
//补window环境
window=global
window.top=window
window.addEventListener=function (event) {
console.log('window中的addEventListener接受的值:', event)
}
//补document
div={
getElementsByTagName: function (res) {
console.log('div中的getElementsByTagName接受的值:', res)
if (res=='i') {
return {length: 0}
}
}
}
meta={
0: {},
1: {
// content: '{qqiWR9xjADLqtZr.GKDUqs39vLCd6fuDojxTsXPqq|[MOVUqGS9kDwYAY2MHmG8qqenYagvFTYnqaVRkcNykUE2QpL1UOm3DmV.UaxMHf24DULSwPQ.o1WoFaQ0osgoFcNzHGWFl1x7iueMEnWPYsGUinpbxrEUmkAWiA36crg6r1VwErNIEG9BVaVFkaqEkf9kra7lrS9tYs3eEPaaxSeIEA9HkkfRiYYWHS7gkPZdkrEPtnQwYs3.eahnr50RXqCjtH09dcbnU7yq4AOBU4TRXVkvoMVtL1OLxi7NNT4YAHqEZm5GKFxqZfCPrWTwLGBbkWL54mK.oiLLSmOEEieM2f_8iwg4amB1DX0kaTVQrgEnzs8CJMW67uDuJ.35XOKaH.0ac80{AVhRPOD1oF7LTncUsEzy56uo8iJ7aOK.T3d7d7kbbH.qS7sbNHjwPZbUgFjASBsb.WM9dBo_PH_LpL1cfl4096k162hsQioxBGHtAihVlwBPeCtEe8.qfQg.wHVg9MepzcbGPT1sAl.orvE_e5EwA2MzQ9Wbt9r1r0r4q!x7z,aac,amr,asm,avi,bak,bat,bmp,bin,c,cab,css,csv,com,cpp,dat,dll,doc,dot,docx,exe,eot,fla,flc,fon,fot,font,gdb,gif,gz,gho,hlp,hpp,htc,ico,ini,inf,ins,iso,js,jar,jpg,jpeg,json,java,lib,log,mid,mp4,mpa,m4a,mp3,mpg,mkv,mod,mov,mim,mpp,msi,mpeg,obj,ocx,ogg,olb,ole,otf,py,pyc,pas,pgm,ppm,pps,ppt,pdf,pptx,png,pic,pli,psd,qif,qtx,ra,rm,ram,rmvb,reg,res,rtf,rar,so,sbl,sfx,swa,swf,svg,sys,tar,taz,tif,tiff,torrent,txt,ttf,vsd,vss,vsw,vxd,woff,woff2,wmv,wma,wav,wps,xbm,xpm,xls,xlsx,xsl,xml,z,zip,apk,plist,ipaqqqqqqqqqqqqqqkRxA1WYW8i2ZaYc0IH9V_UAlwSf3|gYBRPSpKnWLGmzpn1RFgTvfn.WMN2nKrBqVWPwqrME6aBAcYAxK7XifNgJ9qoIDrOhYVmscevR1Qa3rJyk2QrpCg4rYlO8OZfH6qvFCY8H209hArJH6q1VnpSrlaPkAxixrTXpaEYh2ZXAfJ4JoABM1TUmKV0p1w6lTaAFbYgEArBRbVr393oFOmsRvqi8DwDEYpOFkzaRuL9ECQFHfAFhcyeEqLuhcQr3al2qpe5oO7YraggcozOmq06MaQaWcW5HOqD3aEPhnL4hrVNECWVlGqJ3C0IMkzUomlrq 0wR7HvJ6IsUC410DntKRngA;QyqA82EGtIB6ePNEeYo9NG;iEm6gdSTTpYiqU10OlvsnG;yMG8gk5okQ97gP4eb.IadA;T8F36FaS9AtR4sXBkRr0iG;RTlM3IYjAzboXbIiNSIFRA;t7_svh3Kc3.VU9jOjAJgdq;.8D9Zx78FrKF.Zn4xbfmIG;IMhCM7gXESIqShs5TNMo9A;pvBPF7OtrK6trS5vZYizwa;9qxqLXuEeDQeAlNfAL_l.A;VNeyFcNDtQZhV2sfCxyHqA;kT4JL2WRSOhvUIEcOjSrva;LpFhLGWYI8eFx_X999MLEq;NqssQaVItFB0TevtNxJrkG;AI3RN3R7lP0BBnYsoCO5KG;xrYRhwM6FYW7zCsPL.iecq;0kOXzZzt1eXLrlPo.QQ4xG;ApKNqLIRoybF5rIxSnabBG;hfgZrtz_KscdFC6a3f1wKA;Ddfe167m26649h_g.S8UKVgXBt1074790432r0YQLJiVGhVajrMQpjFqUZuNqV80Tt89zds6ycR9fGsCNkl3650r0q}!DBEbb61kMgq_GKiDIZLg9oiwINe0CsjYI7qgLVKAwKS03oewpcl4FvNLIO7y1Tff8kgLIo2mtKfXR6JJw6Y_YTwPJKJxRTp2FUNdsvSGFU2gYvm7YUlP16wcwTJjWYNC36rssnfssmwnM0eVKbYnVvZFwTxcov2N1Dx0MKEKUCfl1YLAi0Y_KDyAxfA7VnfnQ9fZKcfIsvwaIDWDEvy5tmVaiUaqqqqqqqqqqqqqq',
content:'meta_content',
parentNode: {
removeChild: function (tag) {
console.log('meta中的removeChild接受的值:', tag)
}
}
},
length: 2
}
script={
0: {
getAttribute: function (attr) {
if (attr=='r') {
return 'm'
} else {
console.log('script-0中的getAttribute接受的值:', attr)
}
},
parentElement: {
removeChild: function (tag) {
console.log('script-0中的removeChild接受的值:', tag)
}
}
},
1: {
getAttribute: function (attr) {
if (attr=='r') {
return 'm'
} else {
console.log('script-1中的getAttribute接受的值:', attr)
}
},
parentElement: {
removeChild: function (tag) {
console.log('script-1中的removeChild接受的值:', tag)
}
}
},
length: 2
}
document={
createElement: function (tag) {
if (tag=='div') {
return div
} else {
console.log('document中的createElement接受的值:', tag)
return {}
}
},
getElementsByTagName: function (tag) {
if (tag=='meta') {
return meta
} else if (tag=='script') {
return script
} else {
console.log('document中的etElementsByTagName接受的值:', tag)
return {}
}
},
addEventListener: function (event) {
console.log('addEventListener中的addEventListener接受的值:', event)
}
}
//补location
location={
"href": "http://www.fangdi.com.cn/index.html",
"origin": "http://www.fangdi.com.cn",
"protocol": "http:",
"host": "www.fangdi.com.cn",
"hostname": "www.fangdi.com.cn",
"pathname": "/index.html",
}
proxy_array=['window', 'document', 'location', 'navigator', 'history', 'screen', 'target']
getEnv(proxy_array)
setTimeout=function () {}
setInterval=function () {}
最近总结了一些自己做题过程中遇到的易错问题,附带解析,希望对大家有帮助。
A 'foo'==new function(){ return String('foo'); };
B 'foo'==new function(){ return new String('foo'); };
C []==0
D ![]
E !0
点击查看答案
答案:B C E
点击查看涉及到的知识点
1.new返回值
2.String()与 new String()区别
3.隐式类型转换
A 'foo'==new function(){ return String('foo'); };
B 'foo'==new function(){ return new String('foo'); };
C []==0
引用数据类型会先转换为String,然后再转换为number
D ![]
将[]隐式转化为布尔值
E !0
在==比较时遵循以下原则
1. 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;
2. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;
3. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;
4. 如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;
5. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回 true;
6. 在比较相等性之前,不能将 null 和 undefined 转成其他值。
7. null 和 undefined 是相等的。
A readystatechange
B pageshow
C beforeunload
D DOMContentLoaded
点击查看答案
答案:A D
点击查看涉及到的知识点
1.渲染过程
A readystatechange
document有个readyState属性来描述document的状态,当readyState发生变化时会触发readystatechange事件。
loading:文档加载中
interactive:文档加载完毕,此时同样会触发DOMContentLoaded事件
complete:文档以及所引入的图片等资源加载完毕,此时同样会触发load事件
B pageshow
当load事件触发完毕后会触发pageshow事件
C beforeunload
当dom卸载时会触发,浏览器刷新页面、跳转页面、关闭页面时会触发。
D DOMContentLoaded
当dom解析完毕,同步js、css加载完毕时触发,会早于load事件。
Tips:
页面加载渲染简易流程
html解析为DOM,css解析为CSSOM,合并css与dom生成渲染树,布局,并进行渲染
1.浏览器请求html
2.浏览器获取到html
3.浏览器解析html
4.解析到head标签,如果同步js则停止dom解析(等待js下载完毕并执行后继续dom解析),如果是css则不影响dom继续解析(但是影响dom渲染)。
5.进入body标签
Tips:
浏览器遇到通过src引入外部js时,会先渲染已解析的dom
例:
引入外部js, 遇到script src时会先渲染已解析的dom
test.js
var i = 1000000000
while(i>0){
i--
}
console.log("解析完成")
html
<h1>Hello</h1>
<script type="text/javascript" src="test.js"></script>
<h1>world</h1>
执行时,页面会先显示Hello,等几秒后会显示world
页面内写的js会阻塞dom解析与渲染
<h1>Hello</h1>
<script type="text/javascript">
var i = 1000000000
while(i>0){
i--
}
console.log("解析完成")
</script>
<h1>world</h1>
js执行完后才会显示 Hello world
var F=function(){};
Object.prototype.a=function(){};
Function.prototype.b=function(){};
var f=new F();
A f能取到a,但取不到b
B f能取到a,b
C F能取到b,不能取到a
D F能取到a,不能取到b
点击查看答案
答案:A
点击查看涉及到的知识点
1.原型
解析:
一. f能访问那些
二. F能访问那些
A []==true
B !![]
C NaN==NaN
D null==undefined
点击查看答案
答案:A C
点击查看涉及到的知识点
1.隐式类型转换
解析:
A []==true
如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;
B !![]
C NaN==NaN
如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false;
D null==undefined
null 和 undefined 是相等的。
Number(null);
A Null
B 0
C undefined
D 1
点击查看答案
答案:B
点击查看涉及到的知识点
1.Number函数的用法
解析:
function a(a)
{
a^=(1<<4)-1;
return a;
}
A 5
B 10
C 15
D 16
点击查看答案
答案:A
点击查看涉及到的知识点
1.二进制转换
2.左移运算符
3.异或运算符
解析:
涉及到异或、二进制转换、
Tips:
二进制转换为十进制:
除二取余,然后倒序排列,高位补零 例:
10转化为2进制
1. 10%2 = 0
2. 5%2 = 1
3. 2%2 = 0
4. 1 = 1
倒序排列:
1010
console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
A Value is define
B Value is undefine
C define
D undefine
E Value is define 或者 Value is undefine
F define 或者 undefine
G 其它选项都有可能
点击查看答案
答案:C
点击查看涉及到的知识点
1.运算符优先级
解析: 考察运算符优先级,+优先级高于三目运算,上面代码等价于
('Value is ' + (val != '0')) ? 'define' : 'undefine'
<script>
var m= 1, j = k = 0;
function add(n) {
return n = n+1;
}
y = add(m);
function add(n) {
return n = n + 3;
}
z = add(m);
</script>
A 2,4
B 4,4
C 2,2
D 报异常
点击查看答案
答案:B
点击查看涉及到的知识点
1.函数提升
2.值传递
解析:
在错题中寻找自己的知识薄弱点,巩固并完善自己的知识体系,建议收藏,经常看看,避免遗忘~
示:点击上方"蓝色字体"↑ 可以订阅噢!
标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能 被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站 易用性;
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档
加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug
块级元素:div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
Css盒模型:内容,border ,margin,padding
内联 内嵌 外链 导入
区别 :同时加载
前者无兼容性,后者CSS2.1以下浏览器不支持
Link 支持使用javascript改变样式,后者不可
标签选择符 类选择符 id选择符
继承不如指定 Id>class>标签选择
后者优先级高
结构层 Html 表示层 CSS 行为层 js
选择器{属性1:值1;属性2:值2;……}
Ie(Ie内核) 火狐(Gecko) 谷歌(webkit) opear(Presto)
1.双边距BUG float引起的 使用display
2.3像素问题 使用float引起的 使用dislpay:inline -3px
3.超链接hover 点击后失效 使用正确的书写顺序 link visited hover active
4.Ie z-index问题 给父级添加position:relative
5.Png 透明 使用js代码 改
6.Min-height 最小高度 !Important 解决’
7.select 在ie6下遮盖 使用iframe嵌套
8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)
9.ie 6 不支持!important
Alt 当图片不显示是 用文字代表。
Title 为该属性提供信息
Reset重置浏览器的css默认属性 浏览器的品种不同,样式不同,然后重置,让他们统一
Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量
盒子模型 渲染模式的不同
使用 window.top.document.compatMode 可显示为什么模式
文件合并
文件最小化/文件压缩
使用CDN托管
缓存的使用
直观的认识标签 对于搜索引擎的抓取有好处
1.使用空标签清除浮动 clear:both(理论上能清除任何标签,,,增加无意义的标签)
2.使用overflow:auto(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)
3.使用afert伪元素清除浮动(用于非IE浏览器)
<!--[if IE 6]--><![end if]-->
_marging \IE 6
+margin \IE 7
Marging:0 auto 所有Ie
Margin >Margin \0 \\IE 8< \IE 8
想认识志同道合的朋友一起学习web
加入我们的学习QQ群 190166743
丰富的学习资源,周一到周四免费直播公开课
长按图片,识别二维码即可入群
你可能感兴趣的精彩内容
长按关注:《UI设计自学平台》
*请认真填写需求信息,我们会在24小时内与您取得联系。