Files
EasySoft-ZenTaoPMS/module/common/test/model/checkentrytoken.php
T
2025-09-15 15:06:12 +08:00

105 lines
3.1 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
/**
title=测试 commonModel::checkEntryToken();
timeout=0
cid=0
- 执行$entry @1
- 执行$entry @~~
- 执行$entry @1
- 执行$entry @CALLED_TIME
- 执行$entry @ERROR_TIMESTAMP
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
// 定义测试函数,实现checkEntryToken的核心逻辑
function testCheckEntryToken($entry)
{
global $app;
$queryString = array();
if(isset($app->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');