【问题标题】:Prevent requests from other websites to my server [duplicate]阻止来自其他网站的请求到我的服务器[重复]
【发布时间】:2019-07-21 07:22:09
【问题描述】:

考虑以下 Web 应用程序:前端包含一个按钮和一些滑块。按下按钮时,会向服务器发送一个请求以及滑块值。服务端调用python脚本,根据slider的值生成一些内容,然后显示在前端。

如何防止其他人实现向同一服务器发送请求以生成内容的类似应用程序?

【问题讨论】:

  • 我认为您可能需要一个 CSRF 令牌。
  • 到目前为止你尝试过什么?为什么不使用某种身份验证?
  • 我读过 CSRF,但据我了解,它们用于不同的目的,但也许我错了

标签: php html http server


【解决方案1】:

如果您的问题是另一个站点调用您的服务,一个简单的解决方案是检查收到的请求的 Origin 标头是否等于您的主机名和/或域。

像这样:

<?php

// This will check the Origin header

if($_SERVER['HTTP_ORIGIN'] == "http://yoursite.com") {
    header('Access-Control-Allow-Origin: http://yoursite.com');
    // your custom logic to return the slide content
} else {
   // return a 404 error
}

更深入的解释和完整的代码示例可以在以下位置找到:

【讨论】:

    【解决方案2】:

    您正在寻找的解决方案称为CSRF (Cross-Site request forgery)。为了防止这种情况发生,您需要遵循一些基本步骤

    1. 生成唯一令牌(类似于哈希)
    2. 将此令牌发送到前端并在请求 URL 中使用此哈希(可能在请求负载或查询参数中)
    3. 在服务器上收到请求后,验证哈希
    4. 如果哈希是有效的,请继续您的操作并作为响应生成一个新的哈希(然后将在下一个请求中使用)并销毁当前的哈希(这样它就不能被重复使用)
    5. 如果哈希无效,则拒绝请求并显示一些错误消息

    以下是您可能需要查看的一些参考资料:

    【讨论】:

    • 这是否会阻止某人复制前端代码并在另一个网站上创建相同的服务?
    • 是的,当然,给定两个条件,即您的哈希/令牌生成和验证系统不应公开公开,并且实施应该足够安全,以至于没有人可以猜测哈希。但这可能取决于您的前端如何与服务器通信?基于纯 API 调用/响应或您的后端发送 HTML(视图)响应?
    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多