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)。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报