实验报告

协议设计思路

基本思路

  • ProxyServer 解析请求得到目标 WebServer 的 URL, 访问之得到应答, 再转发给 Client

功能实现

  • 由于设计中客户端借由浏览器完成访问, 只需要实现服务端, 我们完成了以下功能:
    • 基本转发
    • 用户认证
    • 消息加密
    • 攻击防护
  • 使用 Python http.server 模块处理 Client 请求, 使用 urllib.request 向 WebServer 发出请求, 进一步完成向 Client 的转发
  • 使用 RFC7235 完成用户认证, 具体过程为: 服务器收到用户请求后, 若请求头不包含 Authorization 域或内容用户名/密码匹配错误, 则返回 401 及 WWW-Authenticate: Basic 返回头, 提醒浏览器进行或再次进行认证
    • 注: 经测试 Chrome 仅支持对 WWW-Authenticate: Basic 响应, 而对其它认证 手段或 Proxy-Authenticate 无响应
  • 使用 HTTPS 进行套接字消息加密, 防止认证信息(Base64), 访问 URL (明文) 及 数据内容泄漏
  • 攻击防护方面, 仅进行了 DDoS 攻击的防护, 在同一源 IP 地址认证失败 10 次后 不再对此 IP 地址的请求进行应答
  • 为了使得页面内链接能够正常访问,需要把其中一些以代理服务器为domain的url改成实际的domain

功能测试截图

 
在 WebServer 上搭建简易服务器
在 WebServer 上搭建简易服务器
在 ProxyServer 启动服务端
在 ProxyServer 启动服务端
Client 端用户第一次登录时需要输入认证信息
Client 端用户第一次登录时需要输入认证信息
认证成功后可以完成访问,且访问过程经 HTTPS 加密
认证成功后可以完成访问,且访问过程经 HTTPS 加密
若 Client 多次认证失败,则 IP 地址会被封禁,服务器不再应答
若 Client 多次认证失败,则 IP 地址会被封禁,服务器不再应答
notion image
 

组员分工

王文新:协议设计,基本转发框架,用户认证,攻击防护
何哲:协议设计,基本转发中修改domain,消息加密