繁体   English   中英

如何保护Web服务器免受反向代理服务器的影响

[英]How to protect a web server FROM a reverse proxy server

我有一个网站“www.website.com”。

最近我发现有人在我的网站前设置了一个反向代理,其中有一个几乎相同的网址“www.website1.com”。

我担心那些通过反向代理访问我网站的用户。 他们登录时可能会记录他们的用户名和密码。

有没有办法让我的Web服务器拒绝反向代理?

例如,我在“www.stackoverflow.com”前面使用网址“www.fakestackoverflow.com”设置了反向代理。 因此,每当我在网络浏览器地址栏中输入“www.fakestackoverflow.com”时,我都会被反向代理重定向到“www.stackoverflow.com”。 然后我注意到我的地址栏中的网址已更改为“www.stackoverflow.com”,表示我不再通过反向代理。

“www.stackoverflow.com”一定检测到我从另一个网址进入网站,然后通过实际网址将我重定向到网站。

我如何在ASP.NET Web应用程序中执行类似的操作?

询问服务器故障

首先,使用JavaScript来嗅探document.location.href并将其与您的域匹配:

var MyHostName =  "www.mydomain.com";
if (0 == document.location.href.indexOf("https://")) 
{
    MyHostName = "https://" + MyHostName + "/";
    if (0 != document.location.href.indexOf(MyHostName)) {
        var new_location = document.location.href.replace(/https:\/\/[^\/]+\//, MyHostName);

        if(new_location != document.location.href)
            document.location.replace(new_location);
    }
}
else
{
    MyHostName = "http://" + MyHostName + "/";
    if (0 != document.location.href.indexOf(MyHostName)) {
        var new_location = document.location.href.replace(/http:\/\/[^\/]+\//, MyHostName);

        if(new_location != document.location.href)
            document.location.replace(new_location);
    }
}

第二步 :将init脚本写入所有ASP页面,以检查远程用户IP地址是否与反向代理的地址匹配。 如果匹配,则重定向到tinyurl链接,该链接重定向回您的真实域。 使用tinyurl或其他重定向服务来反击反向代理的URL重写。

第三步:编写计划任务以对假域进行DNS查找,并更新步骤2中init脚本使用的配置文件。 注意:不要在ASP中进行DNS查找,因为DNS查找可能会停顿5秒钟。 这为您的网站打开了一扇门。 此外,不要仅仅基于IP地址阻止,因为它很容易重新定位。

编辑 :如果您被认为是代理运营商窃取用户密码和用户名,您应该将所有服务的用户记录到代理的IP地址,并禁用他们的帐户。 然后通过拼写错误的域名向他们发送电子邮件,说明他们是网络钓鱼攻击的受害者,并请求他们更改密码。

如果您使用https://进行SSL身份验证,则在大多数情况下可以绕过代理。

您还可以在传入请求中查找X-Forwarded-For标头,并将其与可疑代理进行匹配。

正如我所看到的,你的基本问题是,无论你采取什么样的应用层防御措施来缓解这种攻击都可以由攻击者解决,假设这确实是由有能力的攻击者进行的恶意攻击。

在我看来,你绝对应该使用HTTPS,原则上它允许用户确认他们是否正在与正确的服务器通话,但这依赖于用户知道检查这一点。 有些浏览器现在在URL栏中显示有关哪个法人实体拥有SSL证书的额外信息,这将有所帮助,因为攻击者不太可能说服合法证书颁发机构以您的名义颁发证书。

这里的一些其他评论说,HTTPS可以被中间代理服务器截获,这实际上并不正确。 使用HTTPS,客户端向代理服务器发出CONNECT请求,代理服务器将所有未来流量直接隧道传送到源服务器,而无法读取任何流量服务器。 如果我们假设这个代理服务器是完全定制和恶意的,那么它可以终止SSL会话并拦截流量,但它只能使用自己的SSL证书,而不是你的证书。 此证书将自签名(在这种情况下,客户端将收到大量警告消息)或证书颁发机构颁发的正版证书,在这种情况下,它将具有错误的法人实体名称,您应该能够返回如果您有合理的怀疑他们是网络钓鱼,则向证书颁发机构撤销证书,并可能要求警方对证书的所有者采取行动。

我能想到的另一个可以在某种程度上缓解这种威胁的方法是实现一次性密码功能,使用硬件/软件令牌或使用(我个人最喜欢的)在用户登录时发送到用户手机的短信这不会阻止攻击者一次访问会话,但是应该阻止他们将来登录。 您可以通过要求另一个一次性密码来进一步保护用户,然后再允许他们查看/编辑特别敏感的详细信息。

你可以做很少的事情来防止这种情况,而不会导致合法的代理(翻译,谷歌缓存等)失败。 如果您不关心人们是否使用此类服务​​,那么只需将您的网络应用程序设置为在基本网址不正确时始终重定向。

如果您了解代理,可以采取一些步骤,并且可以找到他们的IP地址,但这可能会发生变化,您必须始终保持最佳状态。 @ jmz在这方面的答案相当不错。

我有一个想法,我认为是一个解决方案。

首先,您不需要覆盖所有页面,因为这样您可以阻止其他代理和其他服务(如谷歌自动翻译)。

所以,假设你赢得了对登录页面的绝对肯定

那么你做什么,当用户登录login.aspx页面时,你会再次将你网站的完整路径重定向到login.aspx。

if(Not all ready redirect on header / or on parametres from url)
  Responce.Redirect("https://www.mysite.com/login.aspx");

这样我认为透明代理不能更改get头并更改它。

您还可以记录任何代理,或来自某些ips的大请求并进行检查。 当您找到类似您所说的钓鱼网站时 ,您也可以报告它。

http://www.antiphishing.org/report_phishing.html
https://submit.symantec.com/antifraud/phish.cgi
http://www.google.com/safebrowsing/report_phish/

经过几天的搜索和实验,我想我已经找到了对我的问题的解释。 在我的问题中,我使用stackoverflow.com作为示例,但现在我将使用whatismyipaddress.com作为我的示例,因为两者在url重写和plusismyipaddress.com能够告诉我的IP地址的意义上表现出相同的行为。

首先,为了重现这种行为,我访问了whatismyipaddress.com并得到了我的IP地址,比如111.111.111.111 然后我访问了www.whatismyipaddress.com (注意附加的www。作为其前缀),浏览器地址栏中的url更改回whatismyipaddress.com,丢弃前缀。 在阅读了Josh Stodola的评论后,我突然想到了这一点。

接下来,我使用网址www.myreverseproxy.com和ip地址222.222.222.222设置了一个反向代理,我让它执行了以下两种方案:

  1. 我有反向代理指向whatismyipaddress.com(没有前缀** www。 )。 然后在浏览器的地址栏中键入www.myreverseproxy.com 反向代理然后将我转发到whatismyipaddress.com并且我的地址栏中的url没有改变(仍显示www.myreverseproxy.com )。 我通过检查显示222.222.222.222 (这是反向代理的IP地址)的网页上的IP地址进一步证实了这一点。 这意味着我仍然通过反向代理查看网页,而不是直接连接到whatismyipaddress.com

  2. 然后我有反向代理点到www.whatismyipaddress.com (前缀为wwww。这次)。 我参观了www.myreverseproxy.com,这一次在我的地址栏中的网址从www.myreverseproxy.com改为whatismyipaddress.com。 网页显示我的IP地址为111.111.111.111 (这是我的电脑的真实IP地址)。 这意味着我不再通过反向代理查看网页并直接重定向到whatismyipaddress.com

我认为这是Josh Stodola指出的某种网址重写技巧。 我想我会更多地阅读这篇文章。 至于如何保护服务器免受反向代理,最好的办法是使用SSL。 通过代理传递的加密信息将毫无用处,因为它无法在普通视野中读取,因此可以防止窃听和中间人攻击,而逆向代理正是这样。

使用javascript进行保护可以看作是微不足道的,因为javascript可以通过反向代理轻松剥离,并且还可以阻止谷歌翻译等其他在线服务访问您的网站。

如果网站在该列表上,则可能创建URL的黑名单并将请求与Response.Referer进行比较,然后终止请求或重定向您自己的请求。

黑名单显然是你必须手动更新的东西。

好吧,我已经通过类似的情况,但我设法通过使用另一个指向我原来的转发域克服它,然后检查代码,如果客户端是反向服务器,如果它,我会将它们重定向到我的第二个域将从原文中查看更多信息: http//alphablog.xyz/your-website-is-being-mirrored-by-someone-else-without-your-knowledge/

最简单的方法可能是在您的页面上放置一些Javascript代码来检查window.location以查看顶级域名(TLD)是否与您期望的匹配,如果不匹配,则将其替换为您正确的域(导致浏览器重新加载)改为正确的网站)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM