首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将web客户端限制在特定的域上?

如何将web客户端限制在特定的域上?
EN

Stack Overflow用户
提问于 2022-05-22 11:30:16
回答 3查看 564关注 0票数 0

我有一个问题,人们克隆我的网站前面,并模仿调用我的API从他们自己的领域滥用我的服务。我想出的解决方案是让检查它工作的URL,加密它,并将其作为头添加到API调用中。混淆JS代码以防止逆向工程。通过这种方式,API将接收一个加密的标头,并确保域是正确的。

所以在客户端

代码语言:javascript
复制
headers.append(`CustomHeader`, this.encryptDomain());

在服务器端

代码语言:javascript
复制
var domainEncrypted = Request.Content?.Headers?.GetValues("CustomHeader").FirstOrDefault();
var domainPlain = Decrypt(domainEncrypted);
if (domainPlain != myDomain)
{
  return BadRequest();
}

您能帮助我使用代码示例来匹配JS和C#加密和解密算法吗?因此,encryptDomain在JS端工作,Decrypt在C#端工作。我知道这不是一个完美的解决办法,但我想尝试一下。如果有人有更好的主意,我们欢迎你。

编辑:显然,我想做的是类似于JScrambler域锁定功能

EN

回答 3

Stack Overflow用户

发布于 2022-06-05 18:33:40

TLDR

在不能/不应该使用IP地址的白列表的情况下,不可能阻止通过不同(克隆)客户端进行通信。

为什么

就这么想吧。您有一个具有某些标识规则的服务器--客户端应该有一些标识符,将其标记为可信的。在你的问题中,这是一个领域。

域是一种公共信息,可以在HTTP报头或请求正文中传递,这很容易,但客户端也很容易替换这些信息。

如果你使用任何类型的密码来提供更安全的识别机制--你只会让黑客更难破解它,然后再假装成可信的客户,因为你在客户端使用的每一种机制都可能是由黑客逆向设计的。看看这个问题

一种可以用来保证访问限制的方法是在服务器端使用IP地址的白列表,因为IP地址是TCP/IP传输层协议的一部分,它有“握手”过程来识别彼此之间的通信点,而且很难替换它。有关详细信息,请查看这个问题

那你能做什么?

CORS

安装CORS策略是创建可信客户端-服务器通信的第一步。大多数浏览器()都支持CORS策略,但客户端可能不是浏览器。问题不在于浏览器与服务器之间的通信,但我应该提到这一点,因为浏览器也是一个客户端。

客户端加密

您可以使用加密,但我不认为有任何理由这样做,因为任何对服务器的请求都可以通过您的合法客户端(网站)读取。所以,即使你加密了它--任何人都有自己的密钥和密码算法来伪装成可信的客户。但如果你想..。

你需要创造独特的钥匙,每一个你的要求,使生活的伪装者更难一点。要做到这一点,你只需要少量的原料:

  • 用于在客户端生成(加密)密钥的公钥
  • 模糊密钥生成JS码
  • 服务器端用于解密生成密钥的私钥

JS端的RSA密码库可以很容易地被谷歌(例如)

使用google也可以找到混淆库(比如)。

如果使用System.Security.Cryptography后端,服务器端可以使用C#命名空间进行解密。

基本上,你制造的更复杂的密钥生成算法和你制造的更模糊的代码对黑客来说更难伪装成一个可信的客户端。但正如我说过的,没有完全确定可信客户的方法。

票数 0
EN

Stack Overflow用户

发布于 2022-06-07 02:54:57

你不能阻止人们复制你网站的FE资产..。它们应该是公开的。你可以试着用更多的块来分割你构建的应用程序,让它变得更难一些(使用角的拉兹加载或者操纵webpack的配置)。尽管如此,浏览器仍然需要纯文本代码,因此,尽管这会使代码变得更加困难,但它并不会阻止复制。

当我们为生产而构建角时,它已经通过它的优化 (小型化、树抖动等)进行代码混淆。

为了减少人们滥用您的服务器资源的问题,您需要在后端请求授权和一些错误使用检测上实现健壮的实践。

配置CORS不起作用,因为您报告攻击者正在使用BE代理。

确保您的请求的身份验证是可靠的。市场标准方法是使用嵌入到每个请求的JWT头中的Authorization有效负载。它简单,可靠,资源便宜。

我还建议实现请求节流。但这是一个分开的问题。

如果您的身份验证已经可靠,则需要检测实际用户何时误用您的系统。有很多工具可以监视流量(比如阿祖尔氏),但是对于“不寻常的流量”却没有一个总括的定义。检测“不寻常的流量”是您需要自定义为您的系统的具体情况。一旦你有一个网络流量工具到位,这将帮助你开始。

票数 0
EN

Stack Overflow用户

发布于 2022-05-24 21:15:32

给你几个解决方案。首先,可以通过在服务器上应用CORS策略来阻止。如果您还想从代码中执行此操作,那么您可以在c#中基于主机名进行如下阻塞。

代码语言:javascript
复制
var hostname = requestContext.HttpContext.Request.Url.Host;
if (hostname != myDomain)
{
  return BadRequest();
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72337166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档