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

客户端可篡改Ajax代码,如何保障代码安全免受干扰?

如何防范客户端篡改Ajax请求的安全风险

核心原则:永远不要信任客户端传来的任何数据,所有客户端请求都存在被篡改的可能,安全防护的关键必须放在服务端。以下是具体可行的解决方案:

  • 强制服务端权限校验
    无论客户端传递什么id或参数,服务端都要验证当前登录用户是否具备操作对应资源的权限。比如用户请求修改id=123的文章,先查询数据库确认该文章的归属者或用户的编辑权限,无权限直接返回错误响应。

  • 使用防篡改的参数标识
    避免使用易猜测的自增ID,改用UUID或加密后的唯一标识;或者给关键参数添加签名——用服务端专属密钥,结合用户会话ID、请求参数生成HMAC签名,客户端请求时携带签名,服务端收到后重新计算签名比对,不一致则拒绝请求。示例伪代码:

    import hmac
    import hashlib
    
    # 服务端密钥(需妥善保管,绝不能暴露给客户端)
    SECRET_KEY = "your_server_secret_key"
    
    # 生成签名
    def generate_signature(user_id, resource_id):
        message = f"{user_id}:{resource_id}"
        return hmac.new(SECRET_KEY.encode(), message.encode(), hashlib.sha256).hexdigest()
    
    # 验证签名
    def verify_signature(user_id, resource_id, received_sign):
        expected_sign = generate_signature(user_id, resource_id)
        return hmac.compare_digest(expected_sign, received_sign)
    
  • 限制请求频率
    对接口做限流控制,比如用Redis记录用户每分钟的请求次数,超过阈值则暂时封禁,防止恶意用户通过频繁篡改参数发起攻击。

  • 前端不暴露敏感逻辑
    权限判断、业务规则等核心逻辑绝对不能写在前端JS中,全部移至服务端处理。比如不要在前端判断“用户能否删除数据”,直接让用户发起请求,由服务端完成权限校验后返回结果。

  • 启用HTTPS传输
    虽然无法阻止客户端篡改请求,但能避免请求在传输过程中被窃听或中间人篡改,确保请求仅在客户端与服务端之间安全传输。

  • 严格校验参数合法性
    对客户端传来的id等参数做格式、范围校验,比如id必须为有效数字且在合法资源ID范围内,不符合则直接返回参数错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:55:29