
对于需要从浏览器客户端发送数据到后端服务的公共端点,如何有效验证请求的真实来源是一个关键问题。传统的验证方法,例如检查请求的Host头或User-Agent头,很容易被外部工具(如cURL、Postman等)伪造,从而无法有效区分来自真实网页的请求与恶意伪造的请求。这使得后端服务面临接收非预期或未经授权数据的风险。本教程将介绍一种基于会话令牌的机制,以增强对请求来源的信任验证。
此方法的核心思想是利用服务器端会话(Session)与客户端浏览器之间的绑定关系。当用户访问网页时,服务器生成一个唯一的、随机的令牌(token),将其存储在当前用户的会话中,并同时将此令牌嵌入到发送请求的HTML表单(通常是隐藏字段)中。当用户提交表单(即发送POST请求)时,表单中的令牌会随请求一同发送到后端。后端服务接收到请求后,会从用户会话中取出之前存储的令牌,并与请求中提交的令牌进行比对。如果两者一致,则认为请求来源于受信任的网页客户端;否则,视为无效请求。
这种机制的有效性在于:
以下将以PHP为例,详细说明如何实现这一验证机制。
立即学习“前端免费学习笔记(深入)”;
在生成包含表单的网页时,服务器端需要生成一个唯一的令牌,将其存储在用户的会话中,并作为隐藏字段嵌入到HTML表单中。
<?php
// 确保会话已启动
session_start();
// 生成一个唯一的令牌
$myValue = uniqid(); // uniqid() 生成一个基于当前微秒数的唯一ID
$_SESSION['myValue'] = $myValue; // 将令牌存储到会话中
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>提交数据页面</title>
</head>
<body>
<h1>用户访问信息提交</h1>
<form action="process_data.php" method="POST">
<!-- 隐藏字段,包含生成的令牌 -->
<input type="hidden" id="token" name="token" value="<?php echo htmlspecialchars($myValue); ?>" />
<!-- 其他表单字段,例如用户交互数据 -->
<label for="interaction_data">交互数据:</label>
<input type="text" id="interaction_data" name="interaction_data" required />
<br>
<button type="submit">提交访问信息</button>
</form>
</body>
</html>说明:
在接收POST请求的后端服务中,需要从请求中获取提交的令牌,并与会话中存储的令牌进行比对。
<?php
// 确保会话已启动
session_start();
// 检查是否是POST请求,并获取提交的令牌
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['token'])) {
$submittedToken = $_POST['token'];
// 检查会话中是否存在令牌,并进行比对
if (isset($_SESSION['myValue']) && $submittedToken === $_SESSION['myValue']) {
// 令牌验证成功
echo "请求来源验证成功,数据处理中...";
// 在这里处理用户提交的访问信息数据,例如保存到数据库
// $interactionData = $_POST['interaction_data'];
// ...
// 验证成功后,可以考虑销毁或更新会话中的令牌,以防止重放攻击(如果令牌是一次性的)
// unset($_SESSION['myValue']);
} else {
// 令牌验证失败:可能令牌不匹配、会话中无令牌或令牌已被销毁
echo "请求来源验证失败:无效或缺失的令牌。";
// 记录日志,并返回错误响应
http_response_code(403); // Forbidden
}
} else {
// 非POST请求或缺少令牌
echo "无效的请求。";
http_response_code(400); // Bad Request
}
?>说明:
基于会话令牌的前端请求来源验证是一种有效且相对简单的安全措施,可以显著提高公共API端点对请求来源的信任度。通过将动态生成的令牌与用户会话绑定,并要求客户端在请求中回传,我们能够有效区分来自自有网页的合法请求与外部工具的伪造请求。在实际应用中,结合其他安全实践(如HTTPS、输入验证、速率限制等),可以构建更健壮安全的Web服务。
以上就是基于会话令牌的前端请求来源验证实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号