您的位置 首页 php

10-15k的PHP面试题|Web篇

OAuth2的四种模式是什么

● 授权码模式

● 隐式授权模式

● 密码模式

● 客户端凭证模式

1)授权码模式

● 访问一个 authorize 的界面,地址带上 response_type , client_id , redirect_uri , scope , state

● 用户登录后点击授权,然后跳转到 redirect_uri 的地址,地址携带授权码( code )和 state

● 网站得到 code 以后可以在后端请求获取 access token。请求携带: client_id , client_secret , grant_type , code , redirect_uri ;

● 授权服务器收到 token 请求后验证 client_id client_secret , code , grant_type 是固定的 authorization_code 表示授权码模式

● 将 token 发送到 redirect_uri 的地址,携带 access_token , token_type , expires_in , refresh_token
response_type 是 code

2)隐式授权模式

● 访问一个 authorize 的界面,地址带上 response_type , client_id , redirect_uri , scope

● 授权服务器将 access token 以锚点的形式发送给 redirect_uri (锚点不会发送到服务器,可以防止中间人攻击)。
response_type 是 token,只能用于一些安全要求不高的场景,会话时间短。

3)密码模式

● 直接 post 访问授权服务器, grant_type password , 携带 client_id , username , password

4)客户端凭证模式

● 直接 post 访问授权服务器, grant_type client_credentials , 携带 client_id , client_secret

● 授权服务器验证后直接返回 access token
这个一般是针对第三方应用的,而不是针对用户的,即可能多个用户共享同一个令牌。

怎样更新AccessToken

● 向授权服务器发送请求, client_id , client_secret , refresh_token , grant_type 是 refresh_token

● 授权服务器验证后直接返回新的 access token

OpenId认证

● 访问 authorize 地址, response_type 为 id_token 或 code id_token ; client_id , redirect_uri , state

● 授权服务器将 id_token 返回。
OpenId Connect 也包括显式和隐式授权以上为隐式;id_token 通常包含用户信息,如果不包含,则应该用 accessToken 访问 userinfo 接口获取。

TCP建立和断开连接过程

TCP 使用 Flags(标志位)实现可靠连接服务,Flags 长度为 6 bits,每一位都表示一种连接状态:

● SYN:建立连接

● FIN:关闭连接

● ACK:响应

● PSH:表示有数据传输

● RST:连接重置

● URG:紧急

MSL 表示 TCP 报文最大生存时间,指任意报文在网络中存在的最大时间,超过这个时间,报文将被丢弃。
现在有主机 A 和主机 B

建立连接过程:

● A 产生一个随机数(seqA)的数据包,并将 flags 的 SYN 置为 1 发送给主机 B,表示 A要求建立连接

● B 收到请求后,也向 A 发送一个数据包,其中包含 flags (SYN=1, ACK=1),ask_number=seqA+1,和一个随机数(seqB)

● A 收到应答后,检查 ACK 码位是否为 1,ask_number 是否正确,如果正确,A 会再向 B 发送一个数据包,包含 flags (SYN=1, ACK=1),ask_number=seqB+1

● B 收响应后,检查 ACK 码位是否为 1,ask_number 是否正确,如果正确则表示建立连接成功

断开连接的过程:

● A 向 B 发送 flags(FIN=1) 和一个序列号(seq=a)的数据包,进入 FIN-WAIT-1 阶段,表示 A 没有数据要向 B 发送了

● B 收到请求后,向 A 发送 flags(ACK=1),序列号(seq=b)和确认号(ack=a+1)的数据包来确认 A 的请求,这时 B 仍可以向 A 发送数据

● B 做好断开连接的准备后,再次向 A 发送 flags(FIN=1, ACK=1),序列号(seq=c)和确认号(ack=a+1),随后 B 停止向 A 发送数据

● A 收到请求并验证,之后向 B 发送flags(ACK=1),序列号(seq=a+1)和确认号(ack=ack+1)的数据包,随后 A 等待 2 MSL 之后进入 CLOSED 阶段。

为什么断开连接客户端最后要等待 2MSL
因为最后的 ASK 包可能会丢失,服务器发现客户端没有回应 ASK,于是重新发送了 SYN,ASK 包,客户端就能在 2SML内收到重发报文,并且发送ASK报文,并重置 2SML 计时器。

TLS/SSL建立连接过程

● 客户端明文发送 协议版本、压缩算法候选列表、加密套件候选列表、随机数 等信息

● 服务端返回 协议版本、加密套件、压缩算法、另一个随机数,通知客户端信息发送结束

● 服务端将自己的 CA 证书通过响应报文发送给客户端

● 客户端验证证书是否有效(CA机构的签名,过期时间等),验证通过后,取出证书中的公钥,再生成一个随机数,并用公钥加密生成一个 key

● 客户端将 key 发送给服务端,此时客户端和服务端都使用 3 个随机数加密得到 协商秘钥

● 客户端采用协商密钥与算法,将之前所有通信参数的 hash 值加密发送给服务器用于数据与握手验证

● 服务端计算之前所有接收信息的 hash 值,然后解密客户端发送的验证信息并验证

● 服务端也和客户端做同样的操作,将通信参数的 hash 值加密传给客服端

● 客户端验证通过连接建立成功

什么是透明代理

也叫强制代理,可以在不修改请求和响应的情况下重定向它们。客户端直接向真实服务器发起连接,代理机拦截请求并与客户端建立连接,然后以客户端 ip 与真实服务器进行请求转发,所以对于客户端和服务器来说,代理机都是透明的。
透明代理的作用:

● 可以通过透明代理解决地域网络延迟问题。

● 企业行为管理软件。

跨站脚本攻击

通过恶意脚本对客户端网页进行篡改,将一些隐私数据如 cookie 发送给攻击者,或将受害者重定向到一个由攻击者控制的网站进行一些恶意操作。解决方案是:

● 转义用户输入。

● 在 cookie 中使用 HttpOnly 选项,防止对 cookie 的获取

重放攻击

指攻击者发送一个目标主机已接收过的包,来达到欺骗系统的目的。解决方案是使用 https 加时间戳参数,另一种方案是请求带上一个随机数,如果随机数已使用过就证明是重放攻击。

SYN Flood 攻击

发送大量伪造的 TCP 连接请求,用假冒的IP发送海量的【第一个握手包 SYN 包】;被攻击的服务器返回第二个握手包 SYN + ACK,而对方不会回应第三个握手包,导致服务器保持大量半连接 HTTP 信道,并且默认重试5次回应第二个握手包。导致正常 SYN 包排不上队,连接不进来

文章来源:智云一二三科技

文章标题:10-15k的PHP面试题|Web篇

文章地址:https://www.zhihuclub.com/148836.shtml

关于作者: 智云科技

热门文章

网站地图