這是Golang編程語言的一組安全原則。
該指南旨在作為應用程序安全團隊的安全軟體開發生命週期(SSDLC)的一部分,為開發團隊和質量保證提供實時的安全參考。
這樣,隨著應用程序安全團隊意識到當前準則中的新安全性注意事項或差距,它將不斷地添加和更新。
Golang是一種強型別語言,內建方法來防止其他語言中發現的安全問題。
例如:沒有指標方法,自動垃圾收集,用於AES的標準加密套件不提供密碼塊連結(CBC)作為選項。。
Checkmarx Web應用程序安全編碼做法:
使用本機模板進行輸出編碼
net/http套件不提供任何類型的輸出編碼。
html/template套件實現了資料驅動的模板,以生成可防止程式碼注入的HTML輸出。
它提供與套件文本/模板相同的界面,並且只要輸出為HTML,就應使用該介面代替本文/模板。
該程序套件了程序套件文本/模板,因此您可以共享其模板API來安全地解析和執行HTML模板。
該軟體套件可理解HTML,CSS,JavaScript和URI。
它為每個簡單的操作管道添加了清理功能。
由於缺乏輸出程式碼,使用net/http套件會使Web應用程序用戶遭受跨站點腳本攻擊。
修正
使用html/template套件可自動轉換HTML,CSS,JavaScript和URI。
如果使用net/http套件,可使用手動轉換並設置Content-Type,它會根據內容自動設置。
風險等級
高
參考
注意輸出編碼繞過
html/template套件提供了一種使用模板規避轉換管道的方法。
[HTML | JS | URL]()方法將字符串設置為其類型。
將用戶置於此聲明函數中將繞過預設值輸出編碼,將跨站點腳本和HTML注入漏洞引入您的Web應用程序。
問題範例:
以下將把 World </ b>字符串聲明為HTML,並將其原樣打印到HTML中:
olang
mpl.Execute(out,template.HTML(`<b> World </ b>`))
``
修正
本地html套件中的EscapeString()函數接受一個字符串,並返回帶有轉換特殊字符的相同字符串。
(即<<變成
<`)。
html/template套件具有stripTags()函數。
html/template套件提供了一些用於轉換字符串的功能:
olang
HTMLEscape()
HTMLEscapeString()
HTMLEscaper()
JSEscape()
JSEscapeString()
JSEscaper()
URLQueryEscaper
``
免在用戶輸入上使用模板類型的字符串。
風險等級
高
參考
使用crypto/rand代替math/rand
math/rand程序套件是確定性偽隨機數生成器。
它獲取一個種子,並隨之生成偽隨機數。
因為它是確定性的,所以每次運行應用程序時這些值都是相同的,從而使攻擊者可以預測這些值。
知道數學/ rand種子的任何人都可以確定應用程序使用的偽隨機值。
修正
應該使用crypto/rand軟體套件而不是math/rand軟體套件。
該軟體套件使用操作系統隨機性來生成偽隨機數。因此,生成的值不是確定的,不需要種子。
問題範例:
/此範例從rand.Reader讀取10個加密安全的偽隨機數,並將其寫入位元組:
olang
package main
import
(
"bytes"
"crypto/rand"
"fmt"
)
func main()
{
c:= 10
b:= make([] byte,c)
_,err:= rand.Read(b)
if err!= nil {
fmt.Println("err:",err)
return
}
//現在應該套件含隨機字節,而不是零。
fmt.Println(bytes.Equal(b,make([] byte,c)))
``
風險等級
高
參考