HTTP_ORIGIN 的安全性如何?

2024-02-08

我想查明来自第三方网站的传入 HTTP_REQUEST 调用是否来自我定义的域列表。

我知道可以使用HTTP_REFERER来查找第三方域在哪里,但它不够安全。人们可以欺骗它或使用 Telnet 来伪造它。

那么,HTTP_ORIGIN 怎么样?它是从所有浏览器发送的吗?安全吗?

另外,人们可以在 HTTP_REQUEST 调用中伪造 REMOTE_ADDR 吗?


HTTP_ORIGIN是一种预防方法CSRF(跨站请求伪造)请求。目前它仅由 Chrome 实现(截至 2011 年 11 月)。我测试了 Firefox 和 Opera,但都失败了。

它在请求头中的名称是Origin。在我的 PHP 脚本的服务器上,我将其视为HTTP_ORIGIN in the $_SERVER大批。仅在某些情况下,当需要针对 CSRF 的保护时才发送此标头(仅 POST 就足够了)。以下是所有请求的列表,无论是否设置:

https://wiki.mozilla.org/Security/Origin https://wiki.mozilla.org/Security/Origin

  • 锚标记 - 否
  • 窗口导航 - 否
  • IMG - NO
  • iframe、嵌入、小程序 - 是
  • 表单(GET 和 POST)- 是
  • 脚本 - 是
  • 样式表 - 否
  • 来自样式表的相关负载 - 否
  • 重定向 - 是
  • XHR-是

The Origin不幸的是, header 仅在 Chrome 中实现。它于 2010 年 1 月在 Google Chrome 博客上首次宣布:

http://blog.chromium.org/2010/01/security-in-deep-new-security-features.html http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html

通过 Origin 标头进行 CSRF 保护

Origin 标头是一项新的 HTML5 功能,可帮助您保护网站免受跨站请求伪造 (CSRF) 攻击。在 CSRF 攻击中,恶意网站(例如attacker.com)指示用户的浏览器向目标服务器(例如example.com)发送HTTP 请求,从而迷惑example.com 服务器执行某些操作。例如,如果 example.com 是网络邮件提供商,则 CSRF 攻击可能会诱骗 example.com 将电子邮件转发给攻击者。

Origin 标头通过识别哪个网站生成请求来帮助网站防御 CSRF 攻击。在上面的示例中,example.com 可以看到请求来自恶意网站,因为 Origin 标头包含值http://attacker.com http://attacker.com。要将 Origin 标头用作 CSRF 防御,站点应仅在响应 (1) 缺少 Origin 标头或 (2) 具有带有白名单值的 Origin 标头的请求时修改状态。

我只是在我的 PHP 脚本中实现 CSRF 保护,我个人使用 Chrome,所以这对我来说已经足够了,我希望其他浏览器很快就能赶上 Chrome。

有趣的是 Mozilla 发明了该安全功能,因为您可以阅读大量相关文档Origin其网站上有标题,但他们仍然没有时间实现它;-)

HTTP_ORIGIN似乎只包含protocol and domain,末尾不带斜杠: “http://www.example.com” - 即使您从“http://www.example.com/myform/”提交表单。

PHP 脚本中针对 CSRF 的简单防护:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_SERVER['HTTP_ORIGIN'])) {
        $address = 'http://'.$_SERVER['SERVER_NAME'];
        if (strpos($address, $_SERVER['HTTP_ORIGIN']) !== 0) {
            exit('CSRF protection in POST request: detected invalid Origin header: '.$_SERVER['HTTP_ORIGIN']);
        }
    }
}

该脚本仍然可以升级以支持 80 以外的端口(Origin 包含不同于 80 的端口)、HTTPS 连接以及从不同子域提交表单(例如 sub.example.com => 将请求发布到www.example.com http://www.example.com).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP_ORIGIN 的安全性如何? 的相关文章

  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 为什么此 HTTP 请求在 AWS Lambda 上不起作用?

    我正在开始使用 AWS Lambda 并尝试从我的处理程序函数请求外部服务 根据这个答案 https stackoverflow com a 27932216 473467 HTTP 请求应该可以正常工作 而且我还没有找到任何其他说明的文档
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • 使用 PHP/linux 将文件合并为单个 PDF

    我正在研究如何将多个 PDF 合并为一个 PDF 我正在寻找一个图书馆可靠且坚固尽可能 最好有一个库可以保留书签 鬼脚本 http pages cs wisc edu ghost 可以在保存书签的位置进行连接 但我遇到了麻烦 在一种情况下它
  • 如何在 PHP 的 HTML 页面中显示错误消息?

    我有以下登录表单 login php 其中要求输入用户名和密码
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • 在 foreach 中使用 QueryPath 的多个查找

    我正在使用 QueryPath 和 PHP 这发现 eventdate 没问题 但不会为 dtstart 返回任何内容 qp htmlqp url foreach qp gt find table schedule gt find tr a
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • Nginx 502 网关错误。通过增加buffer来解决。为什么?

    我正在设置 LEMP 堆栈来运行 Drupal 我安装了 Nginx 和 PHP FastCGI Nginx 工作正常 但任何运行 PHP 的尝试都会出现错误 502 Bad Gateway 谷歌很快发现 nginx 502 错误网关 ht
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert

随机推荐

  • 如何形成 cfhttp 调用来使用自定义 Web 服务 API

    我已经做了 11 年的 cf 开发人员 但很不好意思地说我在 Web 服务方面没有做过任何实质性的事情 如何形成 cfhttp 调用来使用供应商提供的以下 Web 服务 API 肥皂 1 2 要求 POST Portal internet
  • as.numeric 函数更改我的数据框中的值[重复]

    这个问题在这里已经有答案了 我有一列包含速度测量值 我需要将其更改为数字 以便我可以使用平均值和总和函数 然而 当我转换它们时 值会发生很大的变化 为什么是这样 这是我的数据最初的样子 这是数据框的结构 data frame 1899571
  • 如何在使用“layoutAttributesForElements”时对集合视图布局更改进行动画处理?

    我制作了一个自定义集合视图流布局 可以在 胶片带 和 列表 布局之间切换 带动画 但在向边缘单元添加一些奇特的动画后 切换动画中断了 这是目前的样子 没有进行这些更改 动画很流畅 对吧 这是当前的工作代码 完整的演示项目在这里 https
  • 找到两点之间角度的最快方法

    为了提高查找角度正弦 余弦的速度 我构建了一个参考表 而不是即时计算它们 我对从一点到另一点求角度也有同样的想法 我创建了一个包含 3600 个归一化向量的表 3600 10 十分之一度的精度 每当我需要知道从一个点到下一个点的角度时 我都
  • 从子片段访问父片段方法

    我正在尝试从以下位置访问Map分片至myfunction 位于父片段中Tabs 我尝试了以下行Tabs parentFragment Tabs getParentFragment 但是parentFragment 为空 我阅读了有关该主题的
  • 计算单元格中值的数量(空白除外)

    我有一个使用允许多项选择的下拉列表的单元格 如何计算选择的数量 我用过这个 LEN A2 LEN 替换 A2 1 但这并不能解释空白或没有选择的情况 如果没有选择 如何才能显示0 如果您的选择没有空格 则用逗号替换空格 修剪结果 然后按照上
  • 每次在嵌套条件 swift ios 中都会弹出 AlertController

    我定义了一个警报控制器 当用户名或密码不正确时 警报应该弹出 并且工作正常 但是当用户名和密码匹配时 尽管匹配 但每次登录时都会弹出 我想我没有以正确的方式定义嵌套条件 帮我对多重嵌套条件进行排序 登录代码 import UIKit imp
  • 如何使用 ReportViewer 设计将两个数据表添加到 Tablix

    我正在尝试使用 ReportViewer 将两个数据表添加到报告中的表 tablix 中 数据表 dt程序 名称 描述 dt改进 改进 我将有一个程序列表以及每个程序的改进列表 这是我正在寻找的示例 我不知道如何设计我的 ReportVie
  • 为什么将框架文件夹放在公共根目录之外更安全?

    为什么总是建议将框架文件放置在公共根目录之外 鉴于有时框架没有 ini or inc可以用浏览器打开的文件 好吧 肯定没什么可做的gained将框架源放置在 Web 根目录中 由于可以自由选择放置文件的位置 因此使用最小特权原则 http
  • 如何在 PhantomJS 中转到下一页进行抓取

    我正在尝试从具有多个页面的网站中获取多个元素 我目前正在使用 PhantomJS 来完成这项工作 我的代码几乎可以工作 但问题是我的代码在第一页上刮了两次 即使 根据日志 似乎我已经移到了第二页 这是代码 var page require
  • 获取jstree的已检查节点ID列表[重复]

    这个问题在这里已经有答案了 我是新来的jstree and jQuery并且在我的测试树中进行节点检查时遇到了一些问题 用户首先应勾选自己需要的节点 然后点击 概括 按钮以获取警报窗口中已检查节点的 ID 列表 我还想导出 ID 列表以供进
  • VB.NET 中的 WScript?

    这是我的程序中的一段代码 WSHShell WScript CreateObject WScript Shell 但由于某种原因 WScript 没有声明 我知道这段代码可以在 VBScript 中运行 但我正在尝试让它在 vb net 中
  • Python 中的机器 Epsilon

    我目前正在学习的一本手册 我是新手 说 相差小于机器 epsilon 的数字在数值上是相同的 使用 Python 可以通过键入获得浮点值的机器 epsilon eps numpy finfo float eps 现在 如果我检查 1 eps
  • 连接时 , 和 + 有什么区别?

    过去几个月我一直在用 c 编码 但每次连接时我总是对逗号之间的区别感到困惑 和加号 有时 适用于连接 其他时候 用来 我真的不明白其中的区别 请帮帮我 这是代码 class Faculty string firstName lastName
  • Eclipse 上的 Golang:Mac 上“资源没有相应的 Go 包”

    如标题所述 我在 Eclipse 上运行 Golang 代码时遇到问题 我目前使用的是Mac 我使用homebrew安装了go 目前 go安装的文件夹如下 usr local Cellar go 1 5 2 运行终端并输入后open bas
  • 如何刷新页面并保持元素不刷新(持久)直到用户单击提交?

    我正在寻找一种 jQuery 方法来在刷新页面时将页面元素保留在用户屏幕上 当我刷新页面并且丢失 jQuery 页面中的内容时 它会发生变化 我需要该页面是持久的 如何刷新页面并保持元素不刷新 持久 直到用户单击提交按钮 如何才能做到这一点
  • 在 android 中,相机“camera.setParameters”失败

    at android hardware Camera native setParameters Native Method at android hardware Camera setParameters Camera java 647 a
  • Microsoft VBScript 运行时错误:输入超过文件结尾错误

    我收到此错误 C se2 vbs 28 6 Microsoft VBScript 运行时错误 输入超出文件结尾 当我运行脚本时 第 28 行斜体 Dim strInput Dim filesys Dim path Set filesys C
  • Flutter Web:如何在 Flutter Web 应用程序中禁用浏览器的后退按钮

    成功登录后 用户重定向到主页 但当用户单击浏览器后退按钮时 它很容易重定向到登录屏幕 我应该怎么做才能禁用向后重定向 class SecondPage extends StatelessWidget override Widget buil
  • HTTP_ORIGIN 的安全性如何?

    我想查明来自第三方网站的传入 HTTP REQUEST 调用是否来自我定义的域列表 我知道可以使用HTTP REFERER来查找第三方域在哪里 但它不够安全 人们可以欺骗它或使用 Telnet 来伪造它 那么 HTTP ORIGIN 怎么样