- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试提供 mod-rewrite redirect but prevent direct access 的答案时进行了一些测试.
Original question goal is basically mask
example.com/public/foo
asexample.com/foo
while forbidding access to the real URLexample.com/public/foo
.
在我找到一个可能的解决方案后,将 token 附加到重写的 URL 的查询字符串中,
RewriteCond %{REQUEST_URI} !/public/
RewriteRule ^(.*)$ /public/$1?token=SECRET_TOKEN [L]
RewriteCond %{REQUEST_URI} /public/
RewriteCond %{QUERY_STRING} !token=SECRET_TOKEN
RewriteRule ^(.*)$ / [R=403,L]
我意识到(使用 Chrome 的 DevTools)我真的无法在请求 header 中看到此标记。
我明白这是因为第一个 RewriteRule
不会在客户端触发重定向,所有这些重写过程都发生在服务器上。
如果我是对的,这个 SECRET_TOKEN
是安全的,不是吗? (安全,我的意思是客户无法以任何方式知道它)
最佳答案
通常,客户端永远不会看到 SECRET_TOKEN
- 正如您所说,重写是服务器内部的。
但是,有可能 SECRET_TOKEN
可能会在特定条件下暴露,具体取决于服务器配置。
例如,使用您发布的代码,SECRET_TOKEN
可以通过请求 example.com/public
来暴露或 example.com/subdir
(其中 subdir
是 /public
内的子目录)- 注意省略了尾部斜杠。
example.com/public - 如果您请求 /public
(没有尾部斜杠)然后 mod_dir 通过附加一个尾部斜杠来“纠正”这个问题,这是通过 301 外部重定向实现的。但是,重定向不会立即发生,您的 RewriteRule
指令最终将此请求重写(因为此时 REQUEST_URI
变量仍然是 /public
- 没有尾部斜杠)到 /public/?token=SECRET_TOKEN
(注意现在目录上的尾部斜杠)。 (出于某种原因,RewriteRule
似乎没有更新 URL 路径,因为您可能希望这是 /public/public
,但是,查询字符串仍然附加。可能与 mod_dir 发出的子请求有关?不知道为什么?)由于 301 已被 mod_dir 触发,此响应(包含 SECRET_TOKEN
)现在作为 外部重定向 和 SECRET_TOKEN
发送回用户暴露了。
example.com/subdir - 如果有子目录 /public/subdir
,则会发生类似(但略有不同)的事情你请求了/subdir
(没有尾部斜线)。你的RewriteRule
这次指令首先启动并在内部将请求重写为 /public/subdir?token=SECRET_TOKEN
.好的到目前为止。但随后 mod_dir 介入并希望在 /public/subdir
后附加一个斜线。 - 它通过外部 301 重定向来实现。所以请求现在被重定向到/public/subdir/?token=SECRET_TOKEN
和 SECRET_TOKEN
向用户公开(以及以前未知的 /public
子目录)。
但是,以这种方式使用查询字符串还有一些其他注意事项:
就目前而言,您正在覆盖请求中的任何其他查询字符串。
要合并请求中的现有查询字符串,您需要指定 QSA
RewriteRule
上的旗帜.但是,如果用户随后附加了 ?token=
根据请求,他们将覆盖您的 token
URL 参数,如果您想使用 $_GET
阅读此内容PHP 脚本中的超全局。您可以通过显式包含 QUERY_STRING
来手动更改查询字符串参数的顺序替换中的服务器变量而不是使用 QSA 标志 - 但这有点困惑(例如,如果没有查询字符串怎么办?)。
关于apache - 在 htaccess 重写规则中附加一个 secret token 作为查询字符串有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333170/
我正在尝试在我的 minikube 上启动并运行 keycloak。 我正在安装keycloak helm upgrade -i -f kubernetes/keycloak/values.yaml
我将我的数据库密码存储到AWS密钥管理器的Secret Value字段中。如果我使用以下代码,如何检索密码值?。在密钥管理器中定义的密钥:密钥在密钥管理器中定义的值:DBPwd。当我写入日志文件时,上
I am storing my database password into the Secret value field in the aws secret manager. How do I
我正在尝试在 AWS CDK 上组合一个相对简单的堆栈,其中涉及来自 aws-ecs-patterns 的 ApplicationLoadBalancedFargateService。 我的问题涉及
今天我在悠闲地阅读时偶然发现了 Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryp
不是一个真正的编程问题,但很想知道 Kubernetes 或 Minikube 如何管理 secret 并在多个节点/pod 上使用它? 假设我创建了一个 secret 来使用 kubectl 提取图
我需要从 AWS dynamoDB 和第三方 https 服务中获取元素并将这些结果合并到 AWS appSyn 中并将结果作为 graphQL 响应发回 我正在使用的第三方服务需要客户端证书。我没有
我收到一个错误: gpg: no default secret key: No secret key gpg: [stdin]: clearsign failed: No secret key GPG
我正在尝试为 kubernetes 集群设置私有(private) docker 镜像注册表。我正在关注 link $ cat ~/.docker/config.json | base64 ew
当我开发一个API服务器时,我需要给API服务器一些账户信息,这些信息不应该给任何人看。K8s对这种情况推荐secret,所以我用了。 但我想知道这个 secret 是否真的是 secret 。 se
在大多数有关在 Kubernetes 中使用 secret 的示例中,您都可以找到类似的示例: apiVersion: v1 kind: Secret metadata: name: mysecr
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我正在使用 kubernetes 将 Rails 应用程序部署到谷歌容器引擎。 遵循 kubernetes secret 文档:http://kubernetes.io/v1.1/docs/user-
我正在与 terraform 合作,在 azure 中启动不同的资源。其中一些资源包含敏感数据,我希望将其安全地存储在 aws Secret Manager 中。这在 Terraform 中是可行的过
我有带有有效 key 的 Azure 应用程序注册。 我正在尝试使用 v1.0 获取 token ,如下所示(clientId 是上述应用程序注册的 ID) $body = @{ grant_
本文讨论如何安装 secret 卷。 https://learn.microsoft.com/en-us/azure/container-instances/container-instances-v
我有一个 python 脚本,它在 AWS 中创建一些访问 key 并将它们存储在 secret 管理器中。 但是,当我存储 key 时,我收到一条错误消息: The secret value can
我在 Secrets Manager 控制台上创建了一个 key 。然后我尝试使用 Go 代码 quickstart guide喜欢 ctx := context.Background() clien
我是一名优秀的程序员,十分优秀!