1、设置元素浮动后,该元素的display值是?
答案:设置元素为浮动后,display的值是block。
2、["1","2","3"].map(parseInt)?
[1, NaN, NaN]
3、以下结果正确的是___?
A、typeof undefined=undefined和typeof null=null
B、typeof 'hello'=String和typeof 0=Boolean
C、typeof[1,2,3]==Object和typeof NaN==undefined
D、 var a = {name: "李华", age: "23" }; func = function() {}; typeof a == Object和typeof func == Object
4、下面代码执行的结果依次为___?
bar()
var bar = function() {
console.log('bar2')
}
function bar() {
console.log('bar1')
}
bar()
结果是:
bar1
bar2
5、下面代码执行后结果依次为___?
var myObject = {
foo: 'bar',
func: function() {
var self = this;
console.log(this.foo);
console.log(self.foo);
(function() {
console.log(this.foo)
console.log(self.foo)
})()
}
}
myObject.func()
结果:
bar
bar
undefined
bar
分析:
var myObject = {
foo: 'bar',
func: function() {
var self = this;
console.log('this', this);//foo
console.log(this.foo);//bar
console.log(self.foo);//bar
(function() {
console.log('this', this);//Window
console.log('self', self);//foo
console.log(this.foo) //undefined
console.log(self.foo)//bar
})()
}
}
myObject.func()
6、写出下面代码输出的顺序
setTimeout(function() {
console.log(1)
});
new Promise(function(resolve, reject) {
console.log(2)
resolve(3)
console.log(4)
}).then(function(val) {
console.log(val)
})
console.log(5)
输出结果:
2,4,5,3,1
7、js动态创建10个div?
for (var i = 0; i < 100; i++) {
var op = document.createElement("div");
op.innerText = i
document.body.appendChild(op);
}
12、介绍xss、CSRF原理以及防御?
CSRF
CSRF 概念:CSRF 跨站请求伪造 (Cross—Site Request Forgery),存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中 Web A 为存在 CSRF 漏洞的网站,Web B 为攻击者构建的恶意网站,User C 为 Web A 网站的合法用户。
CSRF 攻击攻击原理及过程如下:
1. 用户 C 打开浏览器,访问受信任网站 A,输入用户名和密码请求登录网站 A;
2. 在用户信息通过验证后,网站 A 产生 Cookie 信息并返回给浏览器,此时用户登录网站 A 成功,可以正常发送请求到网站 A;
3. 用户未退出网站 A 之前,在同一浏览器中,打开一个 TAB 页访问网站 B;
4. 网站 B 接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点 A;
5. 浏览器在接收到这些攻击性代码后,根据网站 B 的请求,在用户不知情的情况下携带 Cookie 信息,向网站 A 发出请求。网站 A 并不知道该请求其实是由 B 发起的,所以会根据用户 C 的 Cookie 信息以 C 的权限处理该请求,导致来自网站 B 的恶意代码被执行。
防御 CSRF 攻击: 目前防御 CSRF 攻击主要有 2 种策略:验证 HTTP 请求的 Referer 字段;在请求地址中添加 token 并验证
XSS XSS, 即为(Cross Site Scripting), 中文名为跨站脚本,是发生在目标用户的浏览器层面上的,当渲染 DOM 树的过程成发生了不在预期内XSS(Cross Site Scripting),跨站脚本攻击,是一种允许攻击者在另外一个用户的浏览器中执行恶意代码脚本的脚本注入式攻击。本来缩小应该是 CSS,但为了和层叠样式(Cascading Style Sheet,CSS)有所区分,故称 XSS 执行的 JS 代码时,就发生了 XSS 攻击。
(1) 持续型 XSS 攻击:恶意脚本来源于网站的数据库
1. 攻击者通过评论表单提交将`<script\>alert(‘aaa’)</script\>`提交到网站
2. 网站后端对提交的评论数据不做任何操作,直接存储到数据库中
3. 其他用户访问正常访问网站,并且需要请求网站的评论数据
4. 网站后端会从数据库中取出数据,直接返回给用户
5. 用户得到页面后,直接运行攻击者提交的代码<script\>alert(‘aaa’)</script\>`,所有用户都会在网页中弹出 aaa 的弹窗
(2) 反射型 XSS 攻击:恶意脚本来源于受害者的请求
在一个反射型 XSS 攻击中,恶意文本属于受害者发送给网站的请求中的一部分。随后网站又把恶意文本包含进用于响应用户的返回页面中,发还给用户。
1. 用户误点开了带攻击的 url :`http://xxx?keyword=<script\>alert('aaa')</script\>`
2. 网站给受害者的返回中包含了来自 URL 的的恶意文本
3. 用户的浏览器收到文本后执行页面,会在网页中弹窗 aaa
(3) 基于 DOM 的 XSS 攻击
基于 DOM 的 XSS 攻击是反射型攻击的变种。服务器返回的页面是正常的,只是我们在页面执行 js 的过程中,会把攻击代码植入到页面中
1. 用户误点开了带攻击的 url :`http://xxx?name=<script\>alert('aaa')</script\>`
2. 网站给受害者的返回中正常的网页
3. 用户的浏览器收到文本后执行页面合法脚本,这时候页面恶意脚本会被执行,会在网页中弹窗 aaa
如何防止攻击
XSS 攻击其实就是代码的注入。用户的输入被编译成恶意的程序代码。所以,为了防范这一类代码的注入,需要确保用户输入的安全性。对于攻击验证,我们可以采用以下两种措施:
1. 编码,就是转义用户的输入,把用户的输入解读为数据而不是代码
2. 校验,对用户的输入及请求都进行过滤检查,如对特殊字符进行过滤,设置输入域的匹配规则等。
SQL 注入
SQL 注入就是一种通过操作输入来修改后台 SQL 语句达到代码执行进行攻击目的的技术。
13、编写一个方法去掉数组里面重复的内容,var arr =[1,2,3,4,5,1,2,3]?
var arr = [1, 2, 3, 4, 6, 1, 3, 4, 5, 1, 2, 3]
function reArr(params) {
var newArr = []
for (let i = 0; i < params.length; i++) {
if (newArr.indexOf(params[i]) == -1) {
newArr.push(params[i])
}
}
return newArr
}
let a = reArr(arr)
console.log("去重前", arr)
console.log("去重后", a)
网友评论