golang

分类下相关文章

Golang 后端防御 XSS 攻击:用 bluemonday 让富文本发帖更安全

这两天在用 golang 开发一个论坛的后端接口,遇到了一个 XSS 攻击的场景。 发帖时,前端传递过来的 Content 是 html,经测试发现,如果不对 html 内容进行清理,会导致 XSS 攻击。😰 即,帖子内容中包含了恶意的 js 代码,攻击者可以通过这个 js 代码来窃取用户的 cookie 或者执行其他恶意操作。 什么是 XSS 攻击? XSS(Cross-Site Scripting)攻击是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得这些代码在其他用户的浏览器中执行,从而窃取用户信息、劫持会话等。 XSS 攻击通常发生在用户输入未经过滤或清理的情况下,攻击 ...

阅读全文...

午夜惊魂,在家发版本,线上 golang 找不到 GLIBC 版本导致服务挂掉

昨晚接到紧急需求,需要增加一个搜索功能。当时在家里,感觉很简单的需求, 随便改改,直接发布到线上服务器就行,毕竟我大 golang 只要能编译通过,基本不会有大问题 😏。 但是,不出意外,出了意外。自动发布脚本,在重启 systemd 服务后, 使用 systemctl status 查看状态,发现 golang 服务没有启动成功。 通过命令行单独启动 go 服务,发现报错: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found 还好,我发布前,将可执行程序备份了一份。。。挂了一分钟,我就悄悄恢复了,险些提桶跑路。 ...

阅读全文...

golang gin 基于 Casbin 实现权限控制

最近在使用 golang gin 开发一套公司内部的人事管理系统,但是发现权限管理比之前搞的系统要复杂不少, 所以我想借机了解一下传说中的 Casbin 权限控制库,看看是否可以借鉴一下。 涉及权限控制的需求场景 人事部门负责人需要能看到所有的人事数据 人事部门的普通 HR,只能看到部分部门的人事数据。即只能看到自己负责的部门数据 IT 部门或者行政部门指定人员,能看到资产管理模块的数据。即每个员工有哪些名下资产,显示器,主机,桌子椅子之类的。方便离职时进行资产回收。 部门负责人能看到自己部门的所有员工数据,除了薪资相关的字段。且只有看的权限。不能修改和删除。 员工个人能通过企业微信的授权登 ...

阅读全文...

企业微信同步内部员工通讯录 golang 实现

基于自建应用、自有系统。 腾讯官方文档 概述 - 文档 - 企业微信开发者中心 https://developer.work.weixin.qq.com/document/path/90193 通讯录同步相关接口,可以对部门、成员、标签等通讯录信息进行查询、添加、修改、删除等操作。 企业如果需要从自有的系统同步通讯录到企业微信,需要使用通讯录同步secret。 自建应用、代开发应用、第三方应用在提供功能时,往往需要获取通讯录,开发者可查阅成员、部门、标签相关的接口说明。注意,自建应用、代开发应用、第三方应用仅能读取通讯录,不能编辑,且仅能读取可见范围内的通讯录。 2022年8月15日起,通过 ...

阅读全文...

Golang time.Parse 时区问题引起的时间比对 bug

使用 golang 开发的大赛报名截止时间功能,发现一个奇怪的 bug,就是截止时间判断不准确。 现象是,截止时间设置的是今天上午十点,但是判断函数只有在下午 18 点时才生效。 我第一反应是大概就是时区问题。 未指定时区前 now := time.Now() registerStartTime, err := time.Parse("2006-01-02 15:04:05", registerStart) registerEndTime, err := time.Parse("2006-01-02 15:04:05", registerEnd) fm ...

阅读全文...

golang gin 的管理后台多角色路由权限控制

使用 golang gin 实现一个前后端分离的后台管理系统,管理员分为: 普通管理员 超级管理员 超级管理员可以访问一些普通管理员没有权限访问的接口,同时即便同一个接口两种管理员都能访问,但是可以操作的资源不同。如何设计路由及中间件可以实现清晰简洁的权限管理呢? 例如,超级管理员是我的账号,而客户也能登录这个后台,即客户是普通管理员。我作为超级管理员可以看到后台所有的设备,而客户作为普通管理员只能看到自己所属的设备,且只能对自己的设备进行远程锁机,而不能对其他客户的设备进行操作。 我实在是懒得自己想了,就问了一下 DeepSeek。DeepSeek AI 给出的方案,确实比我目前用的单一 ...

阅读全文...

golang 开发 OA 系统,工作流引擎选型

我想开发一套企业内部使用 OA 系统,使用 golang gin 开发,让 AI 推荐了几个流程管理的库,即工作流引擎。 发现大部分找到的都是 Java Sprint Boot 的实现,但是我还是希望用 golang gin 去实现。毕竟 golang gin 目前用的最顺手,也积累了大量的内部功能库,而且服务器资源占用低。加上是集团内几个公司一块使用,使用现成的开源实现,也达不到要求,估计也很难改。还不如自己基于工作流引擎模块去自己实现。 但是看了几个感觉比较复杂。理解成本有点高,例如: GoFlow:Workflow 引擎, https://github.com/s8sg/goflow/ ...

阅读全文...

MySQL & golang gorm 按月份自动分表存储物联网设备日志

遇到一个存储大量在线设备日志的需求。设备日志通过 MQTT 上传,服务端使用 golang 订阅 MQTT 主题来获取日志,然后存储到 MySQL。之前,为了偷懒,使用了 InfluxDB 2 来存储这里时序数据,但是,经历了一个项目之后,我觉得还是 MySQL 好用。毕竟 influxdb 2.0 的查询语法很不习惯,而且我没有运维经验,这玩意要花时间去了解如何运维,这些时间花费的非常不值。能用最顺手的技术实现,而且稳定可靠,那么就不要折腾。 按照我的估算,按月存储日志,可以把每个表都日志量控制在 1000 万条以内,那么就不需要按天或按周存储了。 今天能把这个功能搞定,就很不错了。也算是设 ...

阅读全文...

golang xuri/excelize 导出 Excel 时,不指定列标号

今天在开发的系统,需要导出大赛参赛作品的所有打分结果。 此前的做法是,指定 Excel 的 Cell 标识,然后写入指定单元格。但是这种做法非常不容易维护,例如,要新增一列,插入到邮箱那列的前面,那么插入后,就需要对应的修改后面的每一列的编号,非常麻烦。 values := map[string]string{ "A1": "年份", "B1": "参赛队名", "C1": "省份", "D1& ...

阅读全文...

golang 通过 SMTP 服务发送邮件

要在服务器的后台接口上,增加一个发送邮件的接口。每天调用的频率也不高。 最终选择了这个库 https://github.com/go-gomail/gomail Star 4.5K,近十年没有更新了。。。但测试没有任何问题,而且也完全满足我的需求。 安装 > go get gopkg.in/gomail.v2 代码 package main import ( gomail "gopkg.in/gomail.v2" ) func main() { msg := gomail.NewMessage() msg.SetHeader("From&quo ...

阅读全文...

接口防刷,golang 生成数字验证码图片,基于 base64Captcha

在网站登录时,需要增加一个验证码图片。不需要复杂的验证,简单的数字,或者英文字母验证即可。 找了一下发现一个 golang 的实现。 三方库 https://github.com/mojocn/base64Captcha 效果如下: 支持: 数字验证码 公式 字母 汉字 音频 安装 > go get -u github.com/mojocn/base64Captcha 生成验证码图片 实际上是生成了一个 base64 格式的图片,测试了一下,大小为 1K 左右。 以 golang gin 框架为例: import "github.com/mojocn/base64Cap ...

阅读全文...

Linux fish shell 中自动补全 go Cobra 创建的命令

书接上回,自从基于 cobra 完成了 Golang AST 解析 struct 字段,自动生成 CRUD 代码,又添加了部分功能。这个自动帮我搬砖的代码生成器基本完成了。😊 但是,在项目中使用的时候,还是有点小瑕疵,就是不能在 fish shell 中自动补全命令,主要是我创建的命令,命令我自己都记不住🥲。每次靠输入 cobra 帮助参数来查看,也略显麻烦。于是,我想能否像 smug 一样,实现自动补全命令。查了一下,果然可以: 添加 fish 自动补全 cobra 内置了针对各种 shell 的自动补全功能。诸如,fish,bash,zsh,powershell。 例如,我的搬砖工具名为 ...

阅读全文...

Golang AST 解析 struct 字段,自动生成 CRUD 代码

上周基于 cobra 实现了一个 golang 的命令行工具, 参考:golang 快速开发命令行工具的神器 cobra & cobra cli,实现了一键生成 go gin 后台,及 react ant design 前端的 CRUD 工具。 大大提升了枯燥的 CRUD 劳作效率。并在两个项目上试水成功。 但是,还有一点不够完美,就是目前的 ant design 前端部分,只是个界面架子。 具体的编辑字段,还得手动一个个添加。这周又接到了一个无数 CRUD 的搬砖项目,我觉得有必要把这部分功能加上了。 这样才能无愧于我的“搬砖之王”的称号。 功能需求 即,使用 golang 解析一个 ...

阅读全文...

升级到 golang 1.23 版本后,gorm 的 count 统计总是返回 0

之前为了使用 excelize 的一个新功能, golang excelize 自动解析 excel 单元格的字体颜色, 将 golang 由 1.18 升级到了 1.23。但是遇到了 gorm 的一个 bug。 问题代码 var items []models.Article db := models.DB.Model(&models.Article{}). Preload("Category") db = db.Session(&gorm.Session{}) db.Order("id desc"). Limit(limit) ...

阅读全文...

golang 快速开发命令行工具的神器 cobra & cobra cli

最近想用 go 开发一个自动生成 gin CRUD 前后端代码的命令行工具,实现跟 python django 类似的快速搭建 admin 后台的体验。 于是找了一个类似的脚手架工具 nunu,但是这个项目的代码组织风格并不是我喜欢的类型,且没有 ant design 前端相关的模板,所以我打算自己重造这个轮子。动手之前,我粗略浏览了一遍 nunu 这个项目的代码,发现里面使用了 cobra 这个库,非常便捷。 在参加烟台八角湾数字经济大会时,边开发,边整理了这篇文档。倪光南院士在上面大讲 AI,我在下面写 CRUD。。。我们都有美好的未来 🥲 cobra 是什么 如果经常需要用 golang ...

阅读全文...