客户端访问Superglobals



PHP Superglobals的行为方式不同,我从不确定该使用哪一种。

客户端(我说的不是黑客或安全攻击,而是">普通用户"(何时可以编辑、创建或访问Superglobal变量?

即使是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中向POST添加一个假表单,或者使用一个简单的Chrome扩展,如EditThisCookie来读取、创建或编辑任何COOKIE

因此:

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

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

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

我的表对吗?

否。

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

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

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

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


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

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


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

你可能不应该在意。

(欺骗第三方提交虚假数据是另一回事,但请参阅此问题(。


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

访问令牌(前提是它们是为特定用户访问某些内容而设计的令牌,而不是服务器应用于访问第三方服务器的API密钥(需要存储在客户端上。具体的位置取决于你将如何使用它。在大多数情况下,会话ID是可以的。

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

相关内容

  • 没有找到相关文章

最新更新