在我的网站上,我有一个基于文件的网站验证过程
用户必须在其根目录中上传一个空文件,其文件名如下:
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
一切正常,但我的问题是,这个过程可以被欺骗吗?
答案 0 :(得分:2)
是的,实际上很容易欺骗这种机制。您只需设置一个网络服务器来捕获所有请求(例如通过Apache的mod_rewrite
配置),并使用包括HTTP-Status-在内的有效响应回答每一个请求。代码200
- 非常容易设置。
如果您的网络服务器的用户代理和/或IP已知,则甚至可以专门针对您的服务器,同时保持对所有其他访问者的正确回复。
为了确保不会发生这种情况,您应该为用户提供随机生成的密钥,然后将该密钥作为指定文件的内容。然后,您应该将文件名和密钥保存在数据库中,并检查两者的合规性(类似于如何处理用户名和密码的组合)。
这种方法类似于例如如何在Google Webmaster Tools身份验证域名所有者身份。您可以非常确定只有有权访问服务器的人才能将此代码存入指定的地址。
请记住"有权访问服务器的人"可能仍然是没有合法访问权限的人。此外,在您自己的服务器和您正在检查的服务器之间执行MITM攻击的攻击者可以发送回来欺骗您的服务器所需的任何内容。好吧,但不管怎样,一切都会丢失。