【问题标题】:Help to understand Facebook oauth code better帮助更好地理解 Facebook oauth 代码
【发布时间】:2010-09-18 01:22:37
【问题描述】:

我是 Facebook 开发和 PHP 方面的新手。今天刚开始,想知道下面这段代码sn-p是做什么的,

<?php

define('FACEBOOK_APP_ID', '123423');  
define('FACEBOOK_SECRET', '3eesewee3e');  

function get_facebook_cookie($app_id, $application_secret) {  
  $args = array();  
  parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); //Why??  
  ksort($args);  
  $payload = '';  
  foreach ($args as $key => $value) {        
    if ($key != 'sig') {//Why checking not equals to 'sig'  
      $payload .= $key . '=' . $value;  
    }  
  }  
  if (md5($payload . $application_secret) != $args['sig']) {//why is this checking  
    return null;  
  }  
  return $args;  
}  

$cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET);  

?>

我有点了解 PHP 函数及其用法。我想知道为什么会这样?

我想知道 cmets //why 行的解释。我有点不太清楚在这次交流过程中会发生什么,以及我们为什么要进行这些检查等。

感谢您的宝贵时间。

问候, 阿布舍克

【问题讨论】:

    标签: php facebook oauth


    【解决方案1】:

    查询的第一行是用 cookie 中的键/值填充 $args

    第二个查询行在$args 的键的循环中。它忽略了'sig',因为这是一个签名,不会被散列。

    查询的第三行检查负载的哈希是否与签名匹配。

    基本上,这段代码所做的是解析 cookie,将键排序为标准顺序,获取排序后的键的散列并将该散列与签名进行比较。如果签名与哈希不匹配,则 cookie 已被篡改。

    $args 数组需要使用标准排序函数进行排序,因为数据的顺序会影响哈希值。

    【讨论】:

    • 完美技巧!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2021-07-29
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多