- 由于前端直接可被用户访问,攻击者可以轻易得到页面和通讯过程中的相关信息,进而进行恶意的攻击,关于其攻击的方式描述正确的有哪些?
A、假定站点 foo.com 的服务器架设在公司内网,提供了任意站点截图服务 foo.com/screenshot?url=xxx,恶意修改 url 中的值为内网地址,构成 SSRF 攻击,进而造成数据泄露的风险
B、网站 foo.com 提供 POST 方法的 /tansfer/to/xxx 的转账服务,由于未做 CSRF 的防范,被攻击者重复伪造该请求,形成重放攻击,造成经济损失
C、网站 foo.com 使用了非安全的 HTTP 协议,其中转账服务 POST /transfer/to/xxx,转账金额 money 在 payload 上,假定接口层面采用了随机 token 来防范 csrf 攻击,接口参数未做签名校验,此时攻击者通过篡改 money 的数值,构成中间人攻击
D、借助社会工程学的理论基础,基于用户的贪婪等心理,制作一个 qq.com 的”冒牌”中奖页面,诱导用户输入账号密码进行登录,造成隐私的泄露,属于”钓鱼”的网络欺诈行为
答案解析:SSRF概念 SSRF为服务端请求伪造(Server-Side Request Forgery),指的是攻击者在未能取得服务器所有权限时。
利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。
SSRF的原理 :很多web应用都提供了从其他的服务器上获取数据的功能。使用指定的URL,web应用便可以获取图片,下载文件,读取文件内容等。SSRF的实质是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。一般情况下, SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
SSRF的主要攻击方式 :攻击者想要访问主机B上的服务,但是由于存在***或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B。而服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,从而获取主机B的一些信息。
csrf:
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比, XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
正确答案: A B C D
- 请选出3的颜色
1 | <style> |
1 | <ul><li>1</li><li>2</li><li>3</li></ul> |
A、蓝色
B、绿色
C、红色
D、黄色
答案解析:
相邻兄弟选择器 (+) 介于两个选择器之间,当第二个元素紧跟在第一个元素之后,并且两个元素都是属于同一个父元素的子元素,则第二个元素将被选中。
而这里并没有指明第一个元素就是最前面的哪一个li,所以每一个li都会找自己的兄弟,结果就是除了第一个li以外的所有li都被选中了。效果看起来和li~li一样。但是实际上是不同的。
通用兄弟选择器:兄弟选择符,位置无须紧邻,只须同层级,AB 选择A元素之后所有同层级B元素。
如果只想找第一个li的相邻兄弟,应该用伪类:first-of-type,这样就会只选中第二个li。
ul { color: blue !important; }//!important优先级最高,但是后面是继承的,所以为0
ul > li { color: green; } 有两个元素选择器,优先级为0002
ul li + li { color: red; }有3个元素选择器,优先级为0003
li { color: yellow; }一个元素选择器,优先级为0001
所以最终的结果是:C
哪种方式的CSS优先级最高
A、link引入
B、@import注入
C、内联方式引入
D、行内方式引入
答案解析:D
- 设任务列表有三个异步的任务,即
taskList = [taskA, taskB, taskC],想使用async/await配合forEach实现串行执行,以下哪个代码是可行的?
1 | A、async function run () { |
答案解析:
forEach 不会按顺序执行 而是并发执行异步任务
for of 和 普通的for循环却能顺序执行异步任务
所以最终的结果是:D
- 以下代码执行的结果是:
1 | function fun () { |
A、foo foo foo
B、bar bar bar
C、qux qux qux
D、bar baz qux
答案解析:
this的指向只有一个,就是函数foo的this,这是因为所有的内层函数都是箭头函数,都没有自己的this,它们的this其实都是最外层foo函数的this。所以不管怎么嵌套,t1、t2、t3都输出同样的结果。如果这个例子的所有内层函数都写成普通函数,那么每个函数的this都指向运行时所在的不同对象。另外,由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。
答案:A
某进程创建的若干个线程,这些线程不能共享的是
A、程序计数器
B、某线程的栈指针
C、进程打开的文件
D、全局变量
E、进程的堆空间
答案解析:AB,线程独享栈,共享进程堆
- tcp发送报文数据时,可能将多个数据包合并成一个大的数据包发送,就有可能发生粘包问题。以下可以用来解决这个问题的是?
正确答案: A B D
A、发送固定长度的消息
B、包结尾增加分隔符
C、慢开始算法
D、把消息分成消息头和消息体,其中消息头上包含长度
E、利用滑动窗口实现控制
- 下列代码的执行结果:
1 | function fn(...args) { |
A、”number”
B、”array”
C、”object”
D、“NaN”
Rest 参数可以通过使用三个点…并在后面跟着包含剩余参数的数组名称,来将它们包含在函数定义中。这些点的字面意思是“将剩余参数收集到一个数组中”。
所以args是一个数组。选C
- 有a.js和b.js两个文件,请选择b文件中代码的输出
1 | // a.js |
A、1 {} 1 {}
B、1 {} 2 {b:2}
C、1 {} 1 {b:2}
D、1 {} 2 {}
答案解析:
commonjs 导出的是值的拷贝 ,在require的时候a.js执行一次,开启定时器,因为执行到export的时候定时器还没有执行,所以a一直是1;b是存储的是一个值引用,属于浅拷贝,所以a.js的b改变时,b.js的a.b也改变。答案是C
- 以下哪行代码添加之后不会造成父容器高度塌陷
正确答案: A
A、display: flex;
B、display:inline;
C、float:left;
D、position:fixed;
- 以下这种写法不规范,但是不会报错,其在浏览器中的表现形式是
<p>1<p>2</p></p>
正确答案: D
A、
1
2
B、
1
2
C、
12
D、
1
2
p标签不能嵌套,因为浏览器会自动认为你的代码不规范,自动帮你补充