【问题标题】:How can I prevent anybody sending requests to my server?如何防止任何人向我的服务器发送请求?
【发布时间】:2020-10-26 21:05:30
【问题描述】:

背景:
我使用 PRN 堆栈(Postgres、Express、ReactJS 和 NodeJS)编写了一个简单的轮询应用程序。客户端向服务器发送 GET 请求,这将返回问题数据并将其显示给用户。然后用户选择选项 A 或 B。然后通过 POST 请求将其发送到服务器,然后触发数据库更新。

我的问题是任何人都可以查看客户端的 RAW HTML 并查看服务器 URL 并自己发送相同格式的 POST/GET 请求。即使我使用了身份验证令牌,肯定有人可以再次查看 RAW HTML,查看 GET 请求并自己进行操作?

我可能在这里完全遗漏了一些东西,因此我们将不胜感激。

【问题讨论】:

  • 没有办法阻止其他请求发送到您的服务器。您的服务器在互联网上。任何人都可以发送给它。通常的解决方案是,对于每个传入请求(登录请求除外),您都需要某种形式的帐户登录凭据,并且您检测到串行滥用并锁定违规帐户。
  • 其实这是个好问题。我很好奇人们用来禁止像requests 这样的包的方法,这使攻击者能够很容易地进行 DOS 攻击。
  • @jfriend00 我认为这可能是答案。我的问题是即使我需要身份验证,当然任何人仍然可以获得自己的令牌,并且仍然可以从那里发送自己的 GET/POST 请求。
  • @Mooncrater - 通常会实施速率限制以避免让一个客户端发送太多请求。这就是像 Google 这样的大公司所做的。
  • @Mooncrater - 不,我所说的完全不是基于 IP 的限制。如果您阅读我的 cmets,我说过您需要一个帐户作为凭证,并且您对该帐户的所有访问进行速率限制。 DDOS 是一个很大的话题,因为有许多类型的攻击,所以没有一般​​的答案——你必须讨论一种特定类型的攻击。某些保护必须在网络层使用路由器和防火墙以及其他网络基础设施进行处理,而其他保护必须在应用程序级别进行。 DDOS 不是这个问题的主题。如果您想更具体地问这个问题,请写下您自己的问题。

标签: api express http security server


【解决方案1】:

这个问题有点不清楚。如果您指的是应用程序层,则除非您将其与互联网断开连接,否则无法阻止它,这是不可能的。有一些方法可以减少负载并跟踪每个请求 - 这是每个人都要做的唯一事情。

限制请求/速率限制

如果有一些公共端点不包含任何身份验证,最好限制在特定时间段内同一用户发送的请求数。您可能会检查一些软件包。这将有助于减少服务器的负载。

身份验证

您可能想要跟踪用户的请求,然后您应该使用令牌或类似的东西对他们进行身份验证。在这种情况下,即使是向您发送请求的客户端,在获得授权之前也不会更改后端的任何数据。

网络层

您可以禁用与服务器的 Internet 连接,并仅允许特定 IP 发送请求。即使在这种情况下,您也不会阻止发送请求,而只是忽略它们。另一种方法是使用 CDN 提供商来保护您的服务免受 DDoS 攻击。

【讨论】:

  • 感谢您的回答。我更多的是从安全的角度来谈论。我想问题应该是:“我怎样才能确保服务器只接受来自实际客户端的请求”。
  • @Jambla 好吧,如果问题是关于 Accepting,那么 Authentication 部分将满足需求。
  • @Jambla 我理解您的困惑,但正如 Emad 解释的那样,按照您的要求做是不可能的。最好的方法是身份验证,但如果他们真的愿意,人们总是可以对应用程序代码进行逆向工程。你应该确保恶意用户不能在你的服务器上做错事。这最好通过身份验证和授权(以及 Emad 回答中的所有其他内容)来完成。区分您的应用和冒名顶替者几乎是不可能的。
猜你喜欢
  • 2019-05-16
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多