讲师中心 微信公众号
AI工具推荐 视频效率加速

如何防止前端伪造请求导致后端误提交表单

胖浩酱_2396

胖浩酱_2396

发布时间:2026-05-11 13:47:03

|

730人浏览过

|

来源于php中文网

原创

如何防止前端伪造请求导致后端误提交表单

本文介绍通过令牌(token)机制、前端预校验与验证码等多重手段,有效拦截伪造的 ajax 表单提交,保障 php 后端接口安全,避免因缺失验证导致的虚假数据入库或业务逻辑异常。

本文介绍通过令牌(token)机制、前端预校验与验证码等多重手段,有效拦截伪造的 ajax 表单提交,保障 php 后端接口安全,避免因缺失验证导致的虚假数据入库或业务逻辑异常。

在使用 AJAX(如 jQuery 的 $.post)向 PHP 后端提交数据时,仅靠前端绑定按钮点击事件(如 #submitmsg.click())无法阻止恶意用户绕过界面、直接构造 POST 请求发起“假提交”。你当前的代码中,return false 仅终止了默认事件行为,但对服务器端完全无防护力——攻击者可轻松用 curl、Postman 或脚本模拟请求,传入任意 user 和 text,造成数据污染或越权操作。

✅ 推荐解决方案:服务端 Token 验证(防 CSRF)

核心思路是引入一次性、服务端生成并校验的随机令牌(Token),确保每次请求均来自合法会话上下文。

1. 前端:获取并携带 Token
修改初始化逻辑,在页面加载时从服务端获取 Token(或由 PHP 模板注入),并在 AJAX 请求中一并发送:

$(document).ready(function () {
    // 假设 Token 已由 PHP 输出到全局变量(更安全做法是通过 API 获取)
    const token = $('#csrf-token').data('token') || ''; // 如:<meta id="csrf-token" data-token="<?= $_SESSION['token'] ?>">

    $("#submitmsg").click(function (e) {
        e.preventDefault(); // 推荐替代 return false,语义更清晰

        const usrmsg = $("#Text").val().trim();
        const username = localStorage.getItem("user");

        // 基础前端校验(提升体验,非安全依赖)
        if (!username || !usrmsg) {
            alert("用户名或消息不能为空");
            return;
        }

        $.post("send.php", {
            text: usrmsg,
            user: username,
            token: token // 关键:传递服务端颁发的令牌
        }, function(result) {
            console.log("提交成功:", result);
            $("#Text").val("");
        }).fail(function() {
            alert("提交失败,请稍后重试");
        });
    });
});

2. 后端(PHP):生成、校验与销毁 Token
在 send.php 中严格校验 Token,并建议一次使用后失效(增强安全性):

<?php
session_start();

// 1. 校验 Token 是否存在且匹配
if (!isset($_POST['token']) || !hash_equals($_SESSION['token'] ?? '', $_POST['token'])) {
    http_response_code(403);
    die('Invalid or expired token.');
}

// 2. 【可选但推荐】Token 一次性使用:校验后立即重置
$_SESSION['token'] = md5(uniqid(mt_rand(), true));

// 3. 安全获取参数(过滤+类型校验)
$username = filter_input(INPUT_POST, 'user', FILTER_SANITIZE_STRING);
$text     = filter_input(INPUT_POST, 'text', FILTER_SANITIZE_STRING);

if (empty($username) || empty($text)) {
    die('Missing required fields.');
}

// ✅ 此处执行业务逻辑(如写入数据库)
// $pdo->prepare("INSERT INTO messages (...) VALUES (?, ?)")->execute([$username, $text]);
echo json_encode(['status' => 'success']);
?>

⚠️ 注意事项:

前端设计优化skill
前端设计优化skill

前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。前端设计与 UI/UX 全方位优化专家。覆盖视觉层次、排版系统、色彩理论、响应式布局、交互体验、动画动效、无障碍访问、性能优化八大维度,帮助开发者将普通页面升级为高品质产品级界面。

下载
  • 永远不要信任前端传来的任何数据:$_POST['user'] 可被篡改,需结合登录态(如 $_SESSION['logged_in_user'])二次校验身份;
  • hash_equals() 替代 ==:防止时序攻击;
  • Token 存储位置:推荐存于 $_SESSION(服务端),避免暴露在 HTML 中被爬取;
  • 配合 HTTPS:防止 Token 在传输中被劫持。

? 补充防护策略

  • 前端 JavaScript 校验:仅用于用户体验优化(如空值提示),绝不可替代服务端验证;
  • 验证码(CAPTCHA):适用于高频、公开接口(如留言、注册),增加自动化攻击成本;
  • 速率限制(Rate Limiting):在服务端记录 IP/用户提交频次,超限则拒绝(如 Nginx 或 PHP 层实现);
  • CORS 与 Referer 检查:作为辅助手段(但易被绕过,不作主要防线)。

综上,Token 机制是防御伪造提交最轻量且有效的方案。它不改变现有 AJAX 流程,只需前后端少量改造,即可显著提升接口安全性。务必坚持“服务端校验为唯一可信源”的原则,构建纵深防御体系。

立即学习“前端免费学习笔记(深入)”;

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2643

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6730

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6166

2024.03.19

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2643

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

5743

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6730

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

6438

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

923

2024.05.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn