URL 中域前面的@(at 符号)的用途是什么?

Ada*_*žek 8 browser dns url phishing

我最近遇到了新的网络钓鱼攻击,该攻击使用@符号使 URL 看起来合法。事情是这样的:

我有一个帐户totally-legit-site.com,攻击者在他的 IP 上设置了一个钓鱼网站,例如192.168.50.20. 然后,他在该网站上向我发送了一条消息,其中包含看起来像的链接http://totally-legit-site.com@192.168.50.20/account。这用于欺骗用户认为这是指向合法网站的链接。

但是,单击此链接会192.168.50.20/account在我的浏览器(Google Chrome)中打开页面。我尝试在随机域之前添加随机内容@,并且我的浏览器总是正确解析页面,并将这些内容丢弃@。因此,如果我尝试打开http://test@google.com,我最终会进入 Google 的主页。

这真的让我很感兴趣。我无法找到有关@域之前的 URL 的任何信息。这怎么称呼?这是互联网早期阶段过时的东西吗?是否有一些网络服务器可以处理 URL 的这一部分(能够修改我的 nginx 实例以根据此参数返回不同的站点会很酷)?

use*_*686 6

此语法用于指定连接到“权限”的协议级身份验证详细信息(用户名,有时也包括密码)。例如参见RFC 3986 第 3.2.1 节

\n

当与 HTTP 一起使用时,凭证在 HTTP Authorization: header中发送;格式取决于服务器请求的身份验证机制,但最常见的Basic是使用身份验证而不进行额外处理。请参阅RFC 7617MDN

\n

许多网络服务器可以根据“htpasswd”文件、LDAP、SQL 或其他数据\xc2\xadbases\xe2\x80\x93 验证凭据,例如,对于 Nginx,请参阅auth_basic或 Apache httpd AuthType Basic

\n

或者,验证可以由 Web 应用程序本身完成,因为它是通过标准 HTTP 标头和状态代码完成的。请参阅PHP示例(但是要在 Apache 中实现此功能,您可能需要启用CGIPassAuth或使用奇怪的重写技巧,否则它不会将授权标头转发到应用程序运行时。)

\n

内置 HTTP 身份验证通常用于 API 和其他自动请求,因为它不需要用户交互,不需要存储 cookie 或其他状态,并且不需要知道如何格式化“登录”POST 请求(基于 <form> 的身份验证需要它)。

\n

这也与这些提示所使用的身份验证方法完全相同:

\n

显示 HTTP 身份验证提示的 Google Chrome 屏幕截图\nFirefox 执行相同操作的屏幕截图\n显示 Windows 内置提示的 Internet Explorer 屏幕截图

\n\n

相同的语法也适用于 FTP 和许多其他使用 URL 并支持身份验证 \xe2\x80\x93 的协议,在所有情况下,都使用该协议的内置机制。

\n
\n

这里的攻击之所以有效,是因为 HTTP 身份验证是可选的,并且在大多数情况下,额外的 HTTP 标头会被 Web 服务器和 Web 应用程序忽略。反之亦然,浏览器直到发送请求后才知道服务器是否会要求身份验证。

\n

然而,这种攻击根本不是什么新鲜事,它至少从 2000 年代初就已经存在了。(事实上​​,在某些时候,浏览器确实开始检查,首先发出未经身份验证的请求,看看服务器是否会回复 401。如果服务器不请求身份验证,Chrome 会在地址栏中隐藏用户名,以确保真实的域名更加明显,并且 Firefox 实际上会警告“这可能是试图欺骗您。”)

\n