1

在我的网站中,我有一个基于文件的网站验证过程

用户必须在他的根目录中上传一个文件名如下的空文件

site-verification-$user_id.html

然后我的脚本使用 php get_headers() 函数来检查这个文件是否存在,例如:

$headers = get_headers( "$user_website/site-verification-$user_id.html" );
if( preg_match( "|200|", $headers[0] ) { // ... website verified

一切正常,但我的问题是,这个过程可以被欺骗吗?

4

1 回答 1

2

是的,实际上很容易欺骗这种机制。您只需要设置一个网络服务器来捕获所有请求(例如,通过 Apache 的mod_rewrite配置)并使用包括 HTTP-Status-Code 在内的有效响应来回答每个请求200- 设置非常容易。

如果您的网络服务器的用户代理和/或 IP 是已知的,则甚至可以专门对您的服务器撒谎,同时保持对所有其他访问者的正确响应。

为确保不会发生这种情况,您应该为用户提供一个随机生成的密钥,然后将其作为命名文件的内容。然后,您应该将文件名和密钥保存在数据库中并检查两者的合规性(类似于您如何处理用户名和密码的组合)。

此方法类似于您在Google 网站管理员工具中验证为域所有者的方式。您可以确定只有有权访问服务器的人才能将此代码存入指定地址。

请记住,“有权访问服务器的人”可能仍然是没有合法访问权限的人。此外,在您自己的服务器和您正在检查的服务器之间执行 MITM 攻击的攻击者可能会发回欺骗您的服务器所需的任何内容。好吧,但是无论哪种方式,一切都会丢失。

于 2014-10-21T10:52:20.917 回答