⽜客⽹⾯试习题
⽬录
⽜客⽹⾯试习题
题⽬:
2.请简述ssrf的原理、有哪些攻击⽅式及防御⽅法。
我的答案:
SSRF(service-side request forgery):服务器端请求伪造。
原理:伪造服务器端发起的请求,获取到客户端所⽆法得到的数据。
SSRF漏洞形成的原因:服务器所提供的接⼝中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进⾏过滤。
SSRF 形成的原因⼤都是由于服务端提供了从其他服务器应⽤获取数据的功能且没有对⽬标地址做过滤与限制。⽐如从指定URL地址获取⽹页⽂本内容,加载指定地址的图⽚,下载等等。 SSRF漏洞就是通过篡
改获取资源的请求发送给服务器,但是服务器并没有发现在这个请求是合法的,然后服务器以他的⾝份来访问其他服务器的资源。
攻击⽅式:
1.扫内⽹
2.向内部任意主机的任意端⼝发送精⼼构造的Payload(负载)
3.DOS(Denial of Service)攻击(请求⼤⽂件,始终保持连接)
4.攻击内⽹的web应⽤,主要是get参数就可以实现的攻击。
5.利⽤file协议读取本地⽂件。
防御⽅式:
过滤:
1.过滤开头不是xxx的所有连接
2.过滤格式为ip的链接,⽐如127.0.0.1
3.结尾必须是某个后缀。
绕过⽅法:
1.http基础认证
2.利⽤302跳转
3.加上# 或?
4.更改其他进制的ip
3.OSPF(Open Shortest Path First)路由协议建⽴邻居的过程有那⼏个状态?
邻接状态建⽴的七个状过程:
① down 开始发送hello包前的状态
② init:开始向外发送hello包
③ 2way:接受到了相邻路由器的hello包,并且包中有对⽅的路由信息,进⼊2way状态,这个状态中需要做DR/BDR选举,选出DR、BDR
④ ExSTART:开始进⾏fisrtDBD包的交换,进⾏主从选举
⑤ Exchange:主从选举完毕之后,进⾏DBD包的传送,直到最后⼀个发完
⑥ loading:路由器使⽤request请求⾃⼰所描述的条⽬的具体信息,对⽅使⽤update发送完整的LSA具体信息
⑦ Full:没有需要求的条件,将进⾏full状态。邻接关系完全建⽴。
3.假设现在只有三台笔记本,分别为PC1、PC2和PC3,其中每台笔记本都有1块有线⽹卡和⼀块⽆线⽹卡,在仅有1根⽹线的情况下,如何将三台笔记本电脑组到⼀个局域⽹中?请给出解题思路步骤。
第⼀步:将其中⼀台笔记本(如PC2)的有线⽹卡和⽆线⽹卡做桥接;
第⼆步:PC1和PC2通过⽹线将有线⽹卡互联,PC2和PC3通过⽆线⽹卡互联;
第三步:将三台PC配置在同⼀个⽹段(⽐如192.168.1.0/24)。
4.请简述操作系统分页式内存管理机制,并介绍下进程fork时对内存的copy on write实现原理。
进制:将虚拟内存空间和物理内存空间皆划分为⼤⼩相同的页⾯,并以页⾯作为内存空间的最⼩分配单
元。
⼀个程序的⼀个页⾯可以存放在任意的⼀个物理页⾯⾥。
在复制⼀个对象时并不是真的在内存中把原来对象的数据复制⼀份到另⼀个地址。
⽽是在新对象的内存映射表中指向同原对象相同的位置,并且把那块内存的Copy-On-Write(写时复制原理)设置为1.
在这个对象指向读操作的时候回,内存数据没有变动,直接执⾏就可以。
在写的时候,才真正将原始对象复制⼀份到,修改新对象的内存映射表到这个位置,然后往这⾥写。
fork之后⼀般会跟⼀个exec。将进程空间完全替换。因此。forl使⽤Copy-On-Write,会省去⼀次不必要的进程空间复制。
5.⽆重复字符的最长⼦串
⽤⼀个map存储每⼀个数的次序+1,⽅便如果出现重复的数,则start从map对应的数值开始,时间复杂度O(n)~
#include<bits/stdc++.h>
using namespace std;
int main(){
string A;
while(cin >> A){
int size = A.length();
int res =0;
unordered_map<int,int>map;
for(int start =0, end =0; end < size; end++){
unt(A[end])){
start =max(start,map[A[end]]);
}
map[A[end]]= end+1;
res =max(res, end - start +1);
}
应届生web前端面试题cout << res << endl;
}
return0;
}
下⾯这个代码是不区分⼤⼩写的情况:看的⽐较明⽩,这个
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string x,res="";
map<char,int> book;//第⼀个类型的键类型,第⼆个是值类型
int i;
for(cin>>x,i=0;i<x.length();i++)
if(!unt(x[i])){//unt实际上就是看该元素是否存在相同元素,有相同为1,没有为0
res+=x[i];
if(x[i]>=65&&x[i]<=91){//⼤写的话
book[x[i]]=1;
book[x[i]+32]=1;
}
if(x[i]>97){
book[x[i]]=1;
book[x[i]-32]=1;
}
//标识说这个元素已经出现过了,不要再出现
}
cout<<res;
}
解释:
⾸先输⼊相应的A字符串。
注意:
使⽤count,返回的是被查元素的个数。(准确的说,应该是该元素之前有没有已经重复过了。如果有,返回1;否则,返回0。注
意,map中不存在相同元素,所以返回值只能是1或0。
使⽤find,返回的是被查元素的位置,没有则返回d()。⽤find函数来定位数据出现位置,它返回的⼀个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查的数据,它返回的迭代器等于end函数返回的迭代器,程序说明
专享练习
数据库
1.关系代数运算:blog.csdn/f_kld/article/details/77168351
2.
3.
4.
5.数据库事务的特性:
原⼦性
⼀致性
隔离性
持久性
6.关系规范化中的删除操作异常是指:不该删除的数据被删除。
7.事务是可以分割的⼀组操作集合
Linux
1.
只要你代码或配置有改动,都要重新编译的,只是如果代码写成块模式的,不⽤整个代码都重新编译,编译器会⾃动编译改动了的代码。ABC都改动了原有的配置,D没有,选择D。
激活⽹卡就⽤ifconfig eth0 up
2.
-r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理
-v 或 --verbose 显⽰执⾏过程
-f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
3.
export⽤于将shell变量输出为环境变量,或者将shell函数输出为环境变量
cat经常⽤来显⽰⽂件的内容
echo⽤于在shell中打印shell变量的值,或者直接输出指定的字符串
env⽤于显⽰系统中已存在的环境变量,以及在定义的环境中执⾏指令
4.
fstab⽂件存放⽂件系统的静态信息,当系统启动时候,会⾃动从该⽂件读取相关信息,并将指定的⽂件系统挂载到指定的⽬录。5.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论