造出异常条件使程序重复释放channel,则会触发运行时panic,从而造成DoS攻击。

小结:

1)

使用defer延迟关闭channel

secguide/Go安全指南.md at main · Tencent/secguide · GitHub https://github.com/Tencent/secguide/blob/main/Go%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md#116%E5%BF%85%E9%A1%BB%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E9%87%8A%E6%94%BEchannel

1.1.6【必须】禁止重复释放channel

  • 重复释放一般存在于异常流程判断中,如果恶意攻击者构造出异常条件使程序重复释放channel,则会触发运行时panic,从而造成DoS攻击。
// bad
func foo(c chan int) {
	defer close(c)
	err := processBusiness()
	if err != nil {
		c <- 0
		close(c) // 重复释放channel
		return
	}
	c <- 1
}

// good
func foo(c chan int) {
	defer close(c) // 使用defer延迟关闭channel
	err := processBusiness()
	if err != nil {
		c <- 0
		return
	}
	c <- 1
}

 

posted @ 2022-01-25 09:35  papering  阅读(68)  评论(0编辑  收藏  举报