分享面试总结,涉及C++、算法、数据结构、操作系统、计算机网络、Linux、数据库、设计模式等,后面持续更新~
# 网络篇--- √4
1. 电脑开机如何知道ip地址?
注意:这里问的重点不是电脑开机,可以从DHCP协议回答。
a) 发现阶段:DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。
b) 提供阶段:DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。
c) 选择阶段:DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。选择以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。
d) 确认阶段:DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定。
2. 知道哪些短连接和长连接?
应用层HTTP的短连接和长连接:
HTTP的短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束后就中断连接。
HTTP的长连接:客户端和服务器之间用于传输HTTP数据的TCP连接后不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接的基础是客户端和服务端都支持长连接。
传输层TCP的短连接和长连接:
TCP的短连接:client向server发起连接请求,server接到请求,双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方都可以发起close操作,一般都是client先发起close操作。短连接一般只会在 client/server间传递一次读写操作。
3. ARP的工作原理?
1. 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,表示IP地址和MAC地址之间的对应关系。2. 当源主机要发送数据时,先检查ARP列表中是否有 对应IP地址的 目的主机的MAC地址。如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,数据包内容:源主机IP地址,源主机MAC地址,目的主机的IP地址。
3. 当本网络的所有主机收到该ARP数据包时,先检查数据包中的IP地址是否是自己的IP地址。如果不是,则忽略该数据包,如果是,则先从数据包中取出源主机的IP和MAC地址写入到ARP列表中。如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
4. 计算机网络的交换技术?-了解即可
电路交换:
三个阶段。建立连接——通话——释放连接
在通话时,两用户之间占用端到端的资源,而由于绝大部分时间线路都是空闲的,所以线路的传输速率往往很低。
分组交换:
组成:报文、首部、分组。采用存储转发技术,即收到分组—存储分组—查询路由(路由选择协议)—转发分组。
优点:高效、灵活、迅速、可靠。缺点:时延、开销。关键构件:路由器。
报文交换:
整个报文传送到相邻结点,全部存储下来之后查询转发表,转发到下一个结点。
电路交换:端到端通信质量因约定了通信资源获得可靠保障,对连续传送大量数据效率高;
报文交换:动态逐段利用传输带宽进行突发式数据通信,效率高;
分组交换:介于两者之间。
图文理解:
5. 了解web攻击吗?
首先了解什么是SQL注入攻击?
攻击者在HTTP请求中注入恶意的SQL代码,服务器使用参数构建数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。
用户登录,输入用户名 lianggzone,密码 ‘ or ‘1’=’1 ,如果此时使用参数构造的方式,就会出现:
select * from user where name = ‘lianggzone’ and password = ‘’ or ‘1’=‘1’
不管用户名和密码是什么内容,使查询出来的用户列表不为空。如何防范SQL注入攻击使用预编译的PrepareStatement是必须的,但是一般我们会从两个方面同时入手。
Web端
1)有效性检验。
2)限制字符串输入的长度。
服务端
1)不用拼接SQL字符串。
2)使用预编译的PrepareStatement。
3)有效性检验。(为什么服务端还要做有效性检验?第一准则,外部都是不可信的,防止攻击者绕过Web端请求)
6. 什么是文件上传漏洞?
文件上传漏洞:用户上传一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。许多第三方框架、服务,都曾经被爆出文件上传漏洞,比如很早之前的Struts2,富文本编辑器等等,可被攻击者上传恶意代码,有可能服务端就被人黑了。
如何预防?
文件上传的目录设置为不可执行。
1)判断文件类型。在判断文件类型的时候,可以结合使用MIME Type,后缀检查等方式。因为对于上传文件,不能简单地通过后缀名称来判断文件的类型,因为攻击者可以将可执行文件的后缀名称改为图片或其他后缀类型,诱导用户执行。
2)对上传的文件类型进行白名单校验,只允许上传可靠类型。
3)上传的文件需要进行重新命名,使攻击者无法猜想上传文件的访问路径,将极大地增加攻击成本,同时向shell.php.rar.ara这种文件,因为重命名而无法成功实施攻击。
4)限制上传文件的大小。
7. 如何保证公钥不被篡改?
将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
公钥加密计算量太大,如何减少耗用的时间?
每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
1. 客户端向服务器端索要并验证公钥。
2. 双方协商生成"对话密钥"。
3. 双方采用"对话密钥"进行加密通信。上面过程的前两步,又称为“握手阶段”。
8. SSL工作过程?
A:客户端,B:服务器端
1. 协商加密算法:A向B发送SSL版本号和可选加密算法,B选择自己支持的算法并告知A。
2. 服务器鉴别:B向A发送包含公钥的数字证书,A使用CA公开发布的公钥对证书进行验证。
3. 会话密钥计算:A产生一个随机秘密数,用B的公钥进行加密后发送给B,B根据协商的算法产生共享的对称会话密钥并发送给A。
4. 安全数据传输:双方用会话密钥加密和解密它们之间传送的数据并验证其完整性。
9. 什么是CSRF攻击?
概念:跨站点请求伪造,指攻击者通过跨站请求,以合法的用户的身份进行非法操作。如何防范CSRF攻击?
1. 安全框架,例如Spring Security。
2. token机制。在HTTP请求中进行token验证,如果请求中没有token或者token内容不正确,则认为CSRF攻击而拒绝该请求。
3.验证码。通常情况下,验证码能够很好的遏制CSRF攻击,但是很多情况下,出于用户体验考虑,验证码只能作为一种辅助手段,而不是最主要的解决方案。
4. referer识别。在HTTP Header中有一个字段Referer,它记录了HTTP请求的来源地址。如果Referer是其他网站,就有可能是CSRF攻击,则拒绝该请求。但服务器并非都能取到Referer。很多用户出于隐私保护的考虑,限制了Referer的发送。在某些情况下,浏览器也不会发送Referer,例如HTTPS跳转到HTTP。
10. 如何防范XSS 攻击?
1. 什么是XSS攻击?
XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。XSS指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
2. XSS攻击类型:
a) 反射性XSS攻击 (非持久性XSS攻击)
漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS攻击包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击),举个栗子,正常发送消息:
b) 持久性XSS攻击 (留言板场景)
XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。也就是说,每当用户使用浏览器打开指定页面时,脚本便执行。与非持久性XSS攻击相比,持久性XSS攻击危害性更大。从名字就可以了解到,持久性XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。举个栗子:
3. 主要原因:过于信任客户端提交的数据!
解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该进行相应的过滤处理,然后才可以进行下一步操作。
进一步理解:客户端提交的数据本来就是应用所需要的,但恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,攻击者就可以肆无忌惮地展开攻击,因此我们绝不可以信任任何客户端提交的数据。
全部评论
(1) 回帖