首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端对Superglobals的访问

客户端对Superglobals的访问
EN

Stack Overflow用户
提问于 2020-04-16 07:55:57
回答 1查看 64关注 0票数 1

以不同的方式运行,我从来不确定要使用哪一种。

客户端(我不是指黑客或安全攻击,而是“正常用户”)什么时候可以编辑、创建或访问超级全局变量?

即使是php.net文档也没有提到这个事实。

根据我到目前为止学到的东西,我可以这样总结它们:

代码语言:javascript
复制
superglobal     read      create      edit

$_GET           V         V           V

$_POST          X         V           X

$_FILES         X         V           X

$_SESSION       ?         X           X

$_COOKIE        V         V           V

我说的不是您的PHP脚本,它在用户发送表单或类似的东西时创建会话变量,但我要说的是,任何人都可以在DOM中添加假表单到POST任何内容,或者使用简单的Chrome扩展(如EditThisCookie )来读取、创建或编辑任何COOKIE

所以:

  1. 我的桌子对吗?我不确定一些要点,因为安全原因,它们是至关重要的。
  2. 我应该在哪里存储合理的数据,如访问令牌或用户ID。

我总是将ID存储在COOKIE中,因为我可以设置它的过期时间,然后我发现任何人都可以伪造它们。如果没有防止它的方法,我将被迫使用会话,问题是它与浏览器会话一起过期(当用户关闭浏览器时,他失去了登录会话)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-16 08:37:35

我的桌子对吗?

不是的。

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

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

客户机不能编辑其中的任何一个(除了发出一个新的请求,从一开始就重新运行PHP程序)。

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

任何人都可以在DOM中添加一个假表单来发布任何内容,或者使用像EditThisCookie这样简单的Chrome扩展来读取、创建或编辑任何COOKIE。

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

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

你可能不应该在意。

(欺骗第三方提交假数据是另一回事,但请看这个问题)。

我应该在哪里存储合理的数据,如访问令牌或用户ID?

访问令牌(如果这些令牌是设计用来让特定用户访问某物的令牌,而不是您的服务器应该用来访问第三方服务器的API密钥)需要存储在客户机上。具体的地方取决于你将如何使用它。在大多数情况下,会话ID是可以的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61245274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档