阻止其他网站向我的服务器发送请求

时间:2019-02-27 14:28:08

标签: php html http server

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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
}

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