西电信安协会招新系统 Golang 后端开发小记

西电信安协会招新系统 Golang 后端开发小记

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

今年1月,CopperKoi与我重做了协会的招新系统,前端使用Vite,后端使用Golang和gin。在开发过程中遇到CSRF防护和密码传输问题,最终通过HTTPS保障明文密码安全。公测时发现接口参数校验问题并解决。代码部署后发现JWT安全漏洞,需改进。

🎯

关键要点

  • 今年1月,CopperKoi与我重做了协会的招新系统,前端使用Vite,后端使用Golang和gin。

  • 开发过程中遇到CSRF防护和密码传输问题,最终通过HTTPS保障明文密码安全。

  • 公测时发现接口参数校验问题,需使用指针或自定义类型来处理布尔值。

  • GORM的默认主键自增从0开始,可能导致鉴权中间件问题,但使用UUID主键可以避免。

  • 在公测前将JWT的secret从代码中提取到环境变量中,但因加载顺序问题导致安全漏洞。

  • 攻击者可通过空密钥伪造JWT,直接接管受保护接口,需将secret硬编码以修复漏洞。

🔎

延伸解读

CSRF防护的重要性

在开发过程中,CSRF(跨站请求伪造)防护是一个关键问题。文章提到通过将JWT放在Authorization Header中来避免CSRF攻击,这表明在前后端分离的架构中,安全设计必须与数据传输方式紧密结合。开发者应重视这一点,以确保系统的安全性。

密码传输的安全性

文章中提到采用HTTPS保障明文密码的安全,这反映了在现代应用中,安全传输的重要性。开发者在设计系统时,应考虑使用HTTPS,并避免在前端进行不必要的加密,以减少潜在的安全风险。

GORM主键自增的潜在风险

GORM的默认主键自增从0开始可能导致鉴权中间件出现问题,尤其是在用户ID为0时可能导致权限混乱。使用UUID作为主键可以有效规避这一风险,开发者在选择数据库设计时应谨慎考虑主键的设置,以确保系统的安全性和稳定性。

JWT安全漏洞的教训

文章提到的JWT安全漏洞提醒开发者在处理敏感信息时要格外小心。将JWT的secret从代码中提取到环境变量中虽然是个好主意,但如果加载顺序不当,可能导致安全隐患。开发者应确保环境变量在使用前已正确加载,以避免潜在的安全漏洞。

延伸问答

招新系统的前端和后端分别使用了什么技术?

前端使用了Vite,后端使用了Golang和gin。

在开发过程中遇到了哪些安全问题?

遇到了CSRF防护和密码传输问题,以及JWT安全漏洞。

如何保障密码传输的安全?

通过HTTPS保障明文密码的安全。

公测时发现了什么接口参数校验问题?

发现需要使用指针或自定义类型来处理布尔值。

GORM的默认主键自增从多少开始?

GORM的默认主键自增从0开始。

如何修复JWT的安全漏洞?

将JWT的secret硬编码在代码里以修复漏洞。

🏷️

标签

➡️

继续阅读