#!/usr/bin/env php server->query_String)) { parse_str($app->server->query_String, $queryString); } unset($queryString['token']); if(isset($queryString['time'])) { $timestamp = $queryString['time']; if(strlen($timestamp) > 10) $timestamp = substr($timestamp, 0, 10); if(strlen($timestamp) != 10 or $timestamp[0] >= '4') { return 'ERROR_TIMESTAMP'; } $expectedToken = md5($entry->code . $entry->key . $queryString['time']); $actualToken = isset($_GET['token']) ? $_GET['token'] : ''; if($actualToken == $expectedToken) { if($timestamp <= $entry->calledTime) { return 'CALLED_TIME'; } return true; } return false; } $queryString = http_build_query($queryString); $expectedToken = md5(md5($queryString) . $entry->key); $actualToken = isset($_GET['token']) ? $_GET['token'] : ''; return $actualToken == $expectedToken; } // 准备测试entry对象 $entry = new stdClass(); $entry->code = 'test_entry'; $entry->key = 'abcdef1234567890abcdef1234567890'; $entry->calledTime = time() - 3600; global $app; // 初始化server对象 if(!isset($app->server)) { $app->server = new stdClass(); } // 测试步骤1:正确的token验证(无时间戳) $queryString = 'm=api&f=getModel'; $_GET['token'] = md5(md5($queryString) . $entry->key); $app->server->query_String = $queryString . '&token=' . $_GET['token']; r(testCheckEntryToken($entry)) && p() && e('1'); // 测试步骤2:错误的token验证(无时间戳) $_GET['token'] = 'wrong_token_12345'; $app->server->query_String = $queryString . '&token=' . $_GET['token']; r(testCheckEntryToken($entry)) && p() && e('~~'); // 测试步骤3:正确的时间戳token验证 $currentTime = time() + 100; $_GET['token'] = md5($entry->code . $entry->key . $currentTime); $_GET['time'] = $currentTime; $app->server->query_String = $queryString . '&time=' . $currentTime . '&token=' . $_GET['token']; r(testCheckEntryToken($entry)) && p() && e('1'); // 测试步骤4:过期时间戳token验证(时间戳小于等于calledTime) $oldTime = $entry->calledTime - 100; $_GET['token'] = md5($entry->code . $entry->key . $oldTime); $_GET['time'] = $oldTime; $app->server->query_String = $queryString . '&time=' . $oldTime . '&token=' . $_GET['token']; r(testCheckEntryToken($entry)) && p() && e('CALLED_TIME'); // 测试步骤5:无效时间戳格式token验证 $_GET['token'] = 'invalid_token'; $_GET['time'] = '12345678901'; // 超过10位的时间戳 $app->server->query_String = $queryString . '&time=' . $_GET['time'] . '&token=' . $_GET['token']; r(testCheckEntryToken($entry)) && p() && e('ERROR_TIMESTAMP');