Php 客户端访问超全局

Php 客户端访问超全局,php,security,client,backend,superglobals,Php,Security,Client,Backend,Superglobals,PHP超全局函数有不同的行为方式,我不知道该用哪一种 客户端(我不是说黑客或安全攻击,而是“普通用户”)何时可以编辑、创建或访问超全局变量 即使是文档也没有提到这一事实 根据我到目前为止学到的知识,我可以这样总结: superglobal read create edit $_GET V V V $_POST X V X $_FILES

PHP超全局函数有不同的行为方式,我不知道该用哪一种

客户端(我不是说黑客或安全攻击,而是“普通用户”)何时可以编辑、创建或访问超全局变量

即使是文档也没有提到这一事实

根据我到目前为止学到的知识,我可以这样总结:

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

因此:

  • 我的桌子对吗?有些问题我不确定,出于安全考虑,它们是至关重要的
  • 我应该在哪里存储敏感数据,如访问令牌或用户ID
  • 我总是将ID存储在COOKIE中,因为我可以设置其过期时间,然后我发现任何人都可以伪造ID。如果没有办法阻止它,我将被迫使用会话,问题是它将与浏览器会话一起过期(当用户关闭其浏览器时,他将丢失其登录会话)

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

    我的桌子对吗

    没有

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

    客户无法阅读其中任何内容。(他们可以读取由浏览器发送或存储在浏览器中的所有数据,并从中推断出这些超全局文件中的数据(
    $\u SESSION
    仍然除外),但他们无法读取超全局文件本身)

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

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


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

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


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

    你可能不该在意

    (欺骗第三方提交虚假数据是另一回事,但请参见)


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

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

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

    我的桌子对吗

    没有

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

    客户无法阅读其中任何内容。(他们可以读取由浏览器发送或存储在浏览器中的所有数据,并从中推断出这些超全局文件中的数据(
    $\u SESSION
    仍然除外),但他们无法读取超全局文件本身)

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

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


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

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


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

    你可能不该在意

    (欺骗第三方提交虚假数据是另一回事,但请参见)


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

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

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