Section outline

  • 我们为此实验设立了一个 Web 服务器。客户端可以向该服务器发送一系列的命令。每个请求必须附加一个有效的 MAC。服务器只有成功验证了 MAC 后才会执行请求中的命令。我们使用主机 VM 作为客户端,并使用一个容器作为 Web 服务器。
     
    关于 Web 服务器。我们将服务器程序部署在 www.seedlab-hashlen.com 域名上。在我们的 VM 中,我们通过将以下条目添加到 /etc/hosts 文件中来实现将此主机名映射到 Web 服务器容器 10.9.0.80(如果该条目不在VM中,请添加该条目)。
    10.9.0.80  www.seedlab-hashlen.com
    服务器代码位于 Labsetup/image_flask/app 文件夹中。它有两个目录: www 目录包含服务器代码, LabHome 目录包含秘密文件和用于计算 MAC 的密钥。
     
    发送请求。服务器程序接受以下命令:
    • lstcmd} 命令: 服务器将列出 LabHome} 文件夹中的所有文件。
    • download} 命令: 服务器将从 LabHome} 目录返回指定文件的内容。
     
    客户端发送到服务器的正常请求如下所示。客户端需要传递 uid 参数给服务器。服务器根据 uid 从 LabHome/key.txt 获取 MAC 密钥。下例中的命令为 lstcmd,其值设置为 1。它请求服务器列出所有文件。最后一个参数是基于密钥(由客户端和服务器共享)和命令参数计算出的 MAC 。在执行命令之前,服务器将验证 MAC 以确保命令的完整性。
    http://www.seedlab-hashlen.com/?myname=JohnDoe&uid=1001&lstcmd=1
    &mac=dc8788905dbcbceffcdd5578887717c12691b3cf1dac6b2f2bcfabc14a6a7f11

    学生应将 myname 字段中的 JohnDoe 值替换为真实的名字(不允许使用空格)。此参数是为了确保不同学生的结果不同。服务器不使用此参数,但会检查该参数是否存在。如果不包含此字段,则请求会被拒绝。教师可以使用此参数来检查学生是否自己完成了作业。如果学生在此任务中不使用真实姓名,则没有任何分数。

    下面展示了另一个示例。该请求包括两个命令:列出所有文件并下载文件 secret.txt。同样需要附加有效的 MAC ,否则服务器将不会执行这些命令。
    http://www.seedlab-hashlen.com/?myname=JohnDoe&uid=1001&lstcmd=1
    &download=secret.txt
    &mac=dc8788905dbcbceffcdd5578887717c12691b3cf1dac6b2f2bcfabc14a6a7f11