重大教训,sql 注入

重大教训,sql 注入

更新:

经常多次挑衅,发现不是 sql 注入导致的……是鉴权 bug,发现后就修复了

攻击者发现 bug 修复后,可能觉得丢了面子

就开始小规模的 cc 攻击

攻击就好办了,直接禁止 ip 即可

…………………………………………………………………………………………


今天真是日了狗了,有人 sql 注入 c站,直接删库

我好绝望啊啊啊啊,然后由于我不常备份,导致损失一个月的数据呜呜呜

无比惨痛

我有生以来终于感受到了所谓的【特级bug】

补救

首先是增加自动备份的脚本

github.com/cliclitv/cli

利用 github action 的定时任务,然后执行备份的脚本,没有用 crontab 啥的,因为我实在对服务端不是很熟悉……

然后将可能存在 sql 注入风险的接口进行重写……

我们网站服务端是 go,然后有一些复杂的接口是拼接的字符串,这部分逻辑真的不拼不行

终于,找到了一个安全的拼接字符串的方法

	var slice []interface{}
	var query string
	if level == 5 {
		query = "SELECT id, name, level, qq, sign FROM users WHERE NOT level = 1 limit ?,?"
	} else if level > -1 && level < 5 {
		query = "SELECT id, name, level, qq, sign FROM users WHERE level = ? limit ?,?"
		slice = append(slice, level)
	}

	slice = append(slice, start, pageSize)
	stmt, err := dbConn.Prepare(query)

        // 然后
        rows, err := stmt.Query(slice...)

是的没错,是拼接 prepare 的问号……

然后每增加一个问号,就往 slice 里面 append 一个变量

然后,解构 slice 传到 Query 里面……是的就这么简单,我猜 prepare 做的事情就是给变量加引号::>_<::


经过这次教训,虽然我还是没有用 orm,但是确实感受到了字符串拼接的痛

唉每次在我松懈的时候,总有人会给我致命一击::>_<::


c站就一个小破站,也不收费,我实在不知道 sql 有什么可优越的,删别人数据有什么可玩的

编辑于 05-07

文章被以下专栏收录