为了账号安全,请及时绑定邮箱和手机立即绑定

客户访问 Superglobals

客户访问 Superglobals

PHP
慕尼黑的夜晚无繁华 2022-12-23 16:16:22
PHP Superglobals 有不同的行为方式,我不确定该使用哪一种。客户端(我说的不是黑客或安全攻击,而是“普通用户”)何时可以编辑、创建或访问超全局变量?甚至php.net文档也没有谈论这个事实。根据我到目前为止所学的知识,我可以这样总结它们:superglobal     read      create      edit$_GET           V         V           V$_POST          X         V           X$_FILES         X         V           X$_SESSION       ?         X           X$_COOKIE        V         V           V我不是在谈论你的 PHP 脚本,当用户发送表单或类似的东西时,它会创建一个SESSION变量,但我在谈论这样一个事实,即任何人都可以在 DOM 中添加一个伪造的表单来发布任何东西或使用一个简单的像EditThisCookie这样的Chrome 扩展程序可以读取、创建或编辑任何COOKIE。所以:我的桌子对吗?我不确定某些要点,出于安全原因,它们至关重要我应该在哪里存储敏感数据,例如访问令牌或用户ID?我一直将ID存储在COOKIE中,因为我可以设置它的过期时间,然后我发现任何人都可以伪造它们。如果没有办法阻止它,我将被迫使用SESSION,问题是它与浏览器会话一起过期(当用户关闭其浏览器时,他将失去其登录会话)。或者有时我使用POST方法来验证调用来自特定页面,但后来我意识到客户端可以读取该表单的内容并从任何地方伪造它。我也应该为此目的使用SESSION吗?
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

我的桌子对吗?

不。

除了$_SESSION所有这些 superglobals 之外,都包含从客户端请求中提取的数据。客户端可以为它们中的任何一个设置初始值(对于给定的 PHP 程序运行)。

客户无法阅读其中任何一个。(他们可以读取由浏览器发送或存储在浏览器中的所有数据,并从中推断出任何超全局变量中的数据($_SESSION仍然除外),但他们自己无法读取超全局变量)。

客户端不能编辑它们中的任何一个(除非发出一个新的请求,它会从头开始重新运行 PHP 程序)。

$_SESSION包含存储在服务器上的数据。可以使用存储在 cookie 中并由客户端发送的 SESSION ID 选择特定会话。


任何人都可以在 DOM 中添加伪造的表单来发布任何内容,或者使用简单的 Chrome 扩展程序(如 EditThisCookie)来读取、创建或编辑任何 COOKIE。

是的。不要盲目相信来自客户端的数据。客户端可以在 cookie、查询字符串或帖子正文中发送它想要的任何数据。


或者有时我使用 POST 方法来验证调用来自特定页面,但后来我意识到客户端可以读取该表单的内容并从任何地方伪造它。我也应该为此目的使用 SESSION 吗?

你可能不应该关心。

(诱骗第三方提交虚假数据另当别论,但请看这个问题)。


我应该在哪里存储敏感数据,例如访问令牌或用户 ID?

访问令牌(假设它们是旨在让特定用户访问某些东西的令牌,而不是(比如)您的服务器应该用来访问第三方服务器的 API 密钥)需要存储在客户端上。具体位置取决于您将如何使用它。大多数情况下,会话 ID 就可以了。

用户 ID(假设它们被用作用户是该用户 ID 的证据)需要以不能被编辑为其他人的方式存储。这意味着要么存储在服务器上(通常在会话中),要么以无法更改的格式(如客户端上的加密 JWT)。


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号