我正在使用 PHP、MySQL 和 Redis 开发 API,并希望对特定调用进行速率限制。 API 位于 CloudFlare 后面。为实现这一点,我将增加每个 IP 地址每小时在 Redis 中进行的特定调用的计数,如果超过限制,将显示错误。
但是,我相信我遇到了 IP 地址欺骗问题。我知道如果真正的客户欺骗了他们的 IP 地址,他们将永远不会收到回复,但这对于诸如创建帐户电话之类的电话来说可能不是必需的。客户端可以通过注册多个具有不同 IP 的帐户来有效地发起 DoS 攻击,同时始终避开速率限制。这会导致我的系统发送大量欢迎电子邮件(导致我的服务器被标记为垃圾邮件),并且如果他们的电子邮件帐户被恶意注册,可能会阻止用户注册。如何避免这种情况?
我的想法:
HTTP_CF_CONNECTING_IP header 时,cloudflare 是否以某种方式验证 IP 地址没有被欺骗?感谢您的帮助和建议。
最佳答案
通常您会使用一个 secret token (API key 、登录凭据或其他)来标识用户并计算每个用户帐户的请求数。
由于您试图通过 IP 限制请求,我假设您将要创建一个“开放”API,任何人都可以在其中发送请求,而无需身份验证。
术语 *IP 欺骗在这种情况下不是问题。这是因为 - 除非他控制您的服务器和互联网之间的路由 - 欺骗攻击者不会得到答案(如您所说)。但是 HTTP(S) 是通过 TCP 传输的,建立 TCP 连接需要攻击者执行一次成功的握手,这需要从服务器接收连接 ID - 这意味着它需要接收答案。
TCP 协议(protocol)的维基百科页面可能是我开始的一个很好的外部资源:https://en.wikipedia.org/wiki/Transmission_Control_Protocol
您会看到IP 欺骗 不是问题。但是您需要明白,通过 IP 进行速率限制根本不是一个好的解决方案。那是因为:
我强烈建议您使用身份验证(连同 SSL!) 并限制每个用户群的请求。
简要回答列出的问题(如果需要,可以解释更多)
Does SSL prevent this form of IP spoofing?
没有
Is there a way to make sure the client receives the server's response, thereby ensuring that it's not a spoofed IP address?
是的,它是在 TCP 中实现的 -> 请参阅上面维基百科链接中的 ACK
Does cloudflare somehow verify the IP address is not spoofed when passing along the HTTP_CF_CONNECTING_IP header?
如上所述。 HTTP 流量需要已建立的 TCP 连接。因此,这是没有意义的。
关于php - 安全地限制 API 速率,防止 IP 地址欺骗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28097121/
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h
我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我的公司有一个巨大的数据库,该数据库接收来自多个来源的(许多)事件,用于监控和报告目的。到目前为止,数据中的每个新仪表板或图形都是一个新的Rails应用程序,在巨大的数据库中有额外的表,并且可以完全访问数据库内容。最近,有一个想法让外部(不是我们公司,而是姊妹公司)客户访问我们的数据,并且决定我们应该公开一个只读的RESTfulAPI来查询我们的数据。我的观点是-我们是否也应该为我们的自己