You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP预约邮件功能正常但前端字符限制被绕过,如何防范恶意提交?

问题根因

前端的maxlength、输入限制等仅用于优化正常用户的交互体验,完全不具备安全防御能力。恶意用户可通过修改前端HTML代码、直接构造POST请求等方式轻松绕过,所有校验逻辑必须在后端补充实现。

修复方案

1. 补充后端字段校验逻辑

在iProcess处理页面获取参数后,先做合法性校验再走后续业务逻辑,参考代码如下:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $notes =  $_POST['notes'] ?? '';
    $passenger =  $_POST['passenger'] ?? '';

    // 乘客人数字段校验:必须为正整数,长度不超过2位
    if (!is_numeric($passenger) || strlen($passenger) > 2 || intval($passenger) < 1) {
        exit("乘客人数格式错误,最多支持99人");
    }
    // 留言字段校验:长度不超过30字符
    if (mb_strlen($notes, 'UTF-8') > 30) {
        // 可根据需求选择报错或自动截断:$notes = mb_substr($notes, 0, 30, 'UTF-8');
        exit("留言内容最多支持30字符");
    }

    // 原有转义逻辑保留
    $notes = htmlentities($notes, ENT_QUOTES, 'UTF-8');
    // 乘客数字段输出到HTML邮件也需要转义,避免XSS风险
    $passenger = htmlentities($passenger, ENT_QUOTES, 'UTF-8');

    // 后续原有邮件发送逻辑不变
}

同时修正前端代码里的textarea标签的maxlength属性,把现有值150改为30,对齐前后端限制规则。

2. 额外安全加固措施

  • 增加CSRF令牌校验:表单页生成随机令牌存在Session中,提交时后端校验令牌一致性,拦截跨站伪造的提交请求
  • 增加人机验证:提交前需要完成图形验证码、滑块验证等操作,拦截自动化批量提交的脚本
  • 增加提交频率限制:同一IP/设备10分钟内最多提交3次预约,避免恶意刷接口
  • 增加敏感词过滤:对留言内容匹配营销类敏感词,命中则直接拦截提交
安全软件选型

如果站点规模较小,完成上述代码修改后即可满足防护需求,无需额外安装安全软件。如果需要降低代码改造成本、同时防御SQL注入、XSS等其他常见Web攻击,可选择以下方案:

  • 云厂商云WAF:主流云厂商都提供开箱即用的Web应用防火墙,配置规则后可自动拦截恶意提交、常见攻击请求
  • 开源WAF:服务器部署ModSecurity,搭配通用防护规则,即可实现基础的恶意请求拦截能力

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:45:03