我是Facebook开发和PHP的新手。我今天刚开始,我想知道以下代码片段的作用,
<?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函数及其用法。我想知道为什么这样做?
我想知道带注释的行的解释//为什么。我有点不确定在这次沟通中来回走动,为什么我们要做这些检查等。
感谢您的时间。
此致 阿布舍克巴克
答案 0 :(得分:0)
第一个查询行正在使用Cookie中的键/值填充$args
。
第二个查询行位于$args
键的循环中。它忽略了'sig'
,因为这是一个签名,不会被哈希。
第三个查询行检查有效负载的散列是否与签名匹配。
基本上,这段代码正在做的是解析cookie,将键排序为标准顺序,获取排序键的哈希值并将该哈希值与签名进行比较。如果签名与散列不匹配,则cookie已被篡改。
$args
数组需要使用标准排序函数进行排序,因为数据的顺序会影响散列值。