Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证发送到服务器的机密?_Php_Http_Php 5.3 - Fatal编程技术网

Php 如何验证发送到服务器的机密?

Php 如何验证发送到服务器的机密?,php,http,php-5.3,Php,Http,Php 5.3,我不记得以前是怎么做的,但我已经做了,不知道是否有人能帮我 我使用带有URL中某些参数的GET请求将数据发布到另一个页面。我想在接收端验证参数。上一次我是通过添加一个秘密然后对其进行散列来实现的,但现在我记不起来是如何实现的。如果您正在验证参数是否来自您希望它们来自的源,即:我只接收来自page1.php的用户的参数,下面是您要做的 用户转到page1.php,将生成一个令牌并将其放入其$\u会话中。哈希标记被添加到page1.php(或link,或其他)上的表单中 用户将参数发送到page2.

我不记得以前是怎么做的,但我已经做了,不知道是否有人能帮我


我使用带有URL中某些参数的GET请求将数据发布到另一个页面。我想在接收端验证参数。上一次我是通过添加一个秘密然后对其进行散列来实现的,但现在我记不起来是如何实现的。

如果您正在验证参数是否来自您希望它们来自的源,即:我只接收来自page1.php的用户的参数,下面是您要做的

  • 用户转到page1.php,将生成一个令牌并将其放入其$\u会话中。哈希标记被添加到page1.php(或link,或其他)上的表单中
  • 用户将参数发送到page2.php
  • 检查是否存在散列,以及$\u会话中的令牌在散列时是否等于用户发送的令牌
  • 请记住,在这种情况下,您仅验证参数是否由已知源发送。始终进行输入验证,以检查接收到的值是否为可接受值

    您可以做的是(您已经说过)添加
    GET
    值的散列。这种方法的优点是链接(如果要发布的话)是“完整的”,即您不需要通过活动会话等依赖其他数据。换句话说,这个链接有自己的验证信息

    我想这样做:

    计算哈希值

  • GET
    键和值的数组进行排序(因为应该忽略参数顺序,例如,
    ?a=1&b=2
    产生与
    ?b=2&a=1
    相同的散列)
  • 计算以固定盐为前缀的数组的a,即
    hashFunc(concat(GETArray,fixedSalt))
  • 将(2)中的
    hash
    添加到
    GET
    参数中
  • 验证值

  • 提取
    hash
    参数并对剩余的
    GET
    键和值数组进行排序
  • 从(1)计算排序数组的哈希值-与上面列表中的(2)的过程相同
  • 检查计算的哈希值是否与
    GET
    参数中的值匹配
  • fixed salt用于确保知识渊博的人不能“猜测”您的哈希算法,从而篡改数据(当然,除非他也知道fixed salt:)


    示例:
    a=1
    b=2

    • 排序数组:
      array('a'=>1,'b'=>2)
    • 散列:
      xyz
      (通过
      sortedArray
      'mySa1t'
      的concat上的
      hashFunc()
    • 获取参数:
      ?a=1&b=2&hash=xyz
      ,请参阅
    • 散列:
      xyz
      ,剩余的GET数组,排序:
      array('a'=>1,'b'=>2)
    • 计算哈希:
      xyz
      (通过
      srecievedSortedArray
      'mySa1t'的concat上的
      hashFunc()
    • xyz
      =
      xyz
      ,耶
    正如你所见,没有人在做这样的“验证”

    事实上,并没有数据通过url发送到另一个页面。在已经存在数据的服务器上发送一些数据是没有意义的

    您将查询字符串取错了。它不发送任何数据,只标识某个页面

    整个页面地址是一个URL,一个页面的唯一地址

    如果您的服务器上有一个响应某个URL的页面,则不需要这样的密封


    您必须验证您的参数,而不是这种散列

    免责声明:以上步骤有点冗长。根据构建链接(查询)和接收数据的方法(
    GET
    parameters),某些步骤可能会被忽略。使用google for CSRF-以前已经讨论过很多次了。注意Chris Schifflett和Stefan Esser的作品(尽管Chris的CSRF重定向器有点狡猾)