假设我有
a)在foo.com
上运行的一些 * 后端 * API
**B)**一些基于JavaScript的静态 front_end,由baa.com
提供,通过获取请求从foo.com
调用API
**c)**一些特殊的 * 客户端 * C,ip为xy
**
我想创建一些.htaccess
文件,始终允许baa.com
上的 front_end 调用 back_end API。我希望能够指定哪些客户可以看到的结果。例如,不应允许客户端直接使用 back_end API,而只能通过baa.com
使用。
=>从foo.com
的Angular 来看:这些请求从何而来?
因为JavaScript fetch命令是在客户端的浏览器中执行的,所以请求的来源总是 * 客户端 * 吗?baa.com
是原点吗?或者有办法区分这两种“起源”吗?foo.com
的.htaccess
是否“知道”front_end 已由baa.com
提供服务,client 请求来自ip xy
?foo.com
上.htaccess
文件的示例内容:
AuthUserFile /usr/www/users/foo/.htpasswd
AuthName "Password Protected Area"
AuthType Basic
Require valid-user
Require host foo.com # <= host of client or host of cross-orgin front_end ?
Require ip xy
1条答案
按热度按时间lztngnrs1#
在CBroe和一些KI的评论的帮助下,我找到了下面的答案。如果我理解正确的话,我真的不能保证,只有www.example.com引用的请求baa.com才能在foo.com上被允许。
**A.**在www.example.com上的
.htaccess
文件的上下文foo.com,一些Require host example.com
语句指的是向foo.com发出请求的客户端的主机。在这种情况下,主机属于客户端IP地址的域或客户端DNS解析的域。前端托管在www.example.com上baa.com,与foo.com上的
.htaccess
文件中的Require host
语句没有直接关系。该语句关注于请求的源,即访问foo.com的客户端。因此,foo.com上的
.htaccess
文件中的某些Require host example.com
指令确保只有来自主机/域example.com的请求才允许访问foo.com上的资源。**B.**为确保baa.com只允许来自foo.com的请求,您可以实施一系列技术来增强应用程序的安全性和完整性。
1.引用者标题检查:虽然
Referer
头可以伪造,但您仍然可以执行基本检查以验证请求是否来自baa.com。在www.example.com上的服务器端代码中foo.com,检查Referer
头值,并将其与https://baa.com
的预期值进行比较。如果它们匹配,则允许请求继续;否则,予以拒绝或相应处理。1.跨域资源共享(CORS):在foo.com的服务器端实现CORS,以控制允许哪些域向API发出请求。将服务器配置为仅允许来自www.example.com的baa.com使用
Access-Control-Allow-Origin
头的请求。这提供了额外的安全层,并确保只允许来自baa.com的请求。但是,“Origin”头也可以伪造。1.身份验证和授权:在www.example.com上实现健壮的身份验证和授权机制foo.com。这可能涉及用户身份验证、会话管理和基于角色的访问控制。通过要求用户进行身份验证,您可以确保只有经过授权的用户才能访问foo.com上的资源,而不管授权者是谁。
1.安全通信:确保客户端(浏览器)和foo.com(API)之间的通信是通过使用HTTPS的安全连接完成的。这有助于防止潜在的网络窃听,并确保请求的完整性。
通过结合这些技术,您可以增强应用程序的安全性,并最大限度地降低未经授权访问foo.com的API的风险。但是,需要注意的是,决心已定的攻击者仍然可以找到绕过这些措施的方法,因此始终建议您采取额外的安全措施并进行监控。
至B。1.
Referer
标头提供有关导致客户端发出请求的引用URL的信息。您可以检查.htaccess
文件中的Referer
头值,以验证请求是否来自baa.com。下面是一个示例,说明如何使用
.htaccess
文件中的Referer
头来允许从baa.com引用的请求:RewriteEngine在RewriteCond %{HTTP_REFERER}上!^https:baa.com [NC] RewriteRule ^ - [F]
在本例中,
RewriteCond
指令检查HTTP_REFERER
变量(包含Referer
标头值)是否不以https?://baa.com
开头。NC
标志使比较不区分大小写。带有
[F]
标志的RewriteRule
用于返回403 Forbidden状态码,并阻止对任何不满足条件的请求的访问。通过将此代码包含在www.example.com上的
.htaccess
文件foo.com,仅允许将baa.com作为引用URL的请求访问foo.com上的资源。来自任何其他引用URL的请求将被阻止。客户端可以在请求中伪造
Referer
头。Referer
报头是HTTP请求的一部分,客户端可以修改甚至省略。客户端可以使用各种方法或工具来修改
Referer
标头,包括浏览器扩展、自定义脚本或直接使用cURL或Postman等工具发送请求。这意味着仅仅依靠Referer
报头来实现安全或访问控制目的并不完全可靠。To B. 2.
Origin
报头用于跨域资源共享(CORS),攻击者可能会伪造此报头。Origin
头由客户端的浏览器设置,客户端可以修改或操作。攻击者可能会修改请求中的
Origin
标头,使其看起来好像来自baa.com,即使它不是。这就是所谓的跨域请求伪造(CSRF)攻击。为了降低CSRF攻击的风险,建议将
Origin
标头与其他安全措施合并使用,例如:1.正确的身份验证和会话管理:实现健壮的身份验证机制,并确保每个请求都包含有效的会话令牌或其他身份验证凭据。
1.同站点Cookie:设置cookie的
SameSite
属性,以防止它们在跨站点请求中发送。这有助于防范依赖于基于Cookie的身份验证的CSRF攻击。通过实施这些额外的安全措施,您可以增强对CSRF攻击的保护,并确保baa.com只允许来自www.example.com的合法请求。