前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不要相信用户输入, 自己的也不行

不要相信用户输入, 自己的也不行

作者头像
老麦
发布2024-01-23 20:44:55
860
发布2024-01-23 20:44:55
举报
文章被收录于专栏:Go与云原生Go与云原生

不要相信用户输入, 自己的也不行

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2024/01/22/do-not-trust-user-input/

这片文章记录了自己的一个 低级错误。浪费了我接近一个小时的时间。

1. 背景介绍

大概背景是公司换了新的 API 网关, 所有项目都要重新介入。

研发团队接入之后, 需要帮他们验证测试, 于是用 go 写了一个简单的工具。

但是实际运行结果

代码语言:javascript
复制
time=2024-01-20 level=ERROR msg="Failed: StatusCode = 400" env=dev region=us target=https://example.com/app/status caller=verifier.go:47#Scan

无论怎调整 API 和参数 都是 400错误(Bad Request), 哪怕是最简单的 健康检查接口 也是如此。

2. 原因

检查完代码之后, 确实找不到什么问题。没办法,只能从配置开始慢慢检查。

代码语言:javascript
复制
# app:
name: appname
envs: dev,qas,prd
regions: r1,r2
uris:
  - method: get
    path: /appname/status
  - method: post
    path: /appname/v1/others
    type: application/json
    data:
      name: zhangsan
      age: 18

经过一番对比检查, 最后发现了是 method 值的问题。

细心你的你可能已经发现, 这里 method 值是小写。而 http 请求中 method 值是大写的。

解决方法就很简单了, 在请求之前 强制转换成大写即可 。截取代码如下。

代码语言:javascript
复制
httpMethod := uri.Method // get, Get

// 转换大写
httpMethod = strings.ToUpper(uri.Method) // GET

req := protocol.NewRequest(httpMethod, target, nil)

3. 总结

排查经过和反思

3.1. 排查经过

  1. 查看代码:这部分确实浪费了一些时间。
    1. 觉得代码没问题, 检查 API, 使用 Postman 对比测试。
    2. API 没问题, 查看代码逻辑。检查哪里缺少 header, 哪里 body 处理错误。
  2. 检查配置:主要集中检查 结构体中的 字段 Tag 是否与 配置字段 否能对上。
    1. tag 名字是否有错误拼写。
    2. tag 名字是否被修改过。
  3. 检查字段值:在之前没有 debug 的地方加入 log.Debug 查看是否符合预期。

3.2. 反思

为什么会出现这种问题呢?

  1. 平常用使用的都是类似 http.MethodGet 这样的变量, 虽然知道后面是大写, 但是没出过问题, 所以印象不够深刻。
  2. 还是太轻信自己了。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景介绍
  • 2. 原因
  • 3. 总结
    • 3.1. 排查经过
      • 3.2. 反思
      相关产品与服务
      腾讯云服务器利旧
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档