DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

เปิด golangci ให้ใช้ gosec

#go

Linter หรือ Lint Tool อาจจะมีที่มาจากเครื่องมือในการกำจัดขน ออกจากเนื้อผ้าฝ้าย เพื่อให้ผ้ามีความสะอาดสวยงามพร้อมนำไปใช้งาน
ส่วนในด้าน Software Development เราก็มีการใช้ Linter ด้วยเหมือนกัน เพื่อตรวจสอบ Source Code ที่เขียนลงไป ว่ามีอะไรที่อาจจะก่อให้เกิด error หรือ bugs ไปจนถึงความเสี่ยงด้านความปลอดภัย เอาเป็นว่า อยากจะตรวจสอบอะไร ถ้าสามารถหา pattern ได้ก็ควรจะตรวจสอบได้หมด

ในภาษา Go เรามี linter ให้เลือกใช้เยอะจนเวียนหัว แต่ถ้าจะให้แนะนำสักตัว ก็คงไม่พ้นต้องมีตัวนี้เป็นหนึ่งในตัวเลือกแรกๆ นั่นก็คือ golangci-lint

ข้อดีอย่างหนึ่งที่ผมชอบส่วนตัวคือ มันเป็นตัวรวม linter อื่นๆมาไว้ให้แล้ว และหนึ่งในนั้นก็คือ gosec เพียงแต่ว่า มันจะถูก disable เอาไว้เป็น default
วันนี้ก็เลยจะมาแนะนำการเปิดใช้ gosec ใน golangci-lint กันดู

ก่อนอื่นก็ install golangci-lint กันก่อน ตามคู่มือนี้ได้เลย https://golangci-lint.run/usage/install/
ส่วนผม install ด้วย Go แบบนี้

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

จากนั้นก็ไปที่ repo โปรเจคของเราที่เขียนด้วย Go แล้วก็สร้างไฟล์ config โดยสามารถสร้างได้หลายแบบ ตามนี้

.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json

โดยผมจะสร้างเป็น .golangci.yml

จากนั้นก็ลงรายละเอียดในไฟล์แบบนี้

linters:
  enable:
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - typecheck
    - gosec
linters-settings:
  gosec:
    excludes:
      - G303
Enter fullscreen mode Exit fullscreen mode

ผมใส่ enable ตัว default ของ golangci-lint เอาไว้ก่อน และเติม gosec เข้าไปในลิสต์
ทีนี้ในกรณีที่ gosec มันสแกนยุบยับไปหมด และเราอยากจะปิดบางตัวเอาไว้ ยกตัวอย่างเช่น ผมจะปิดตัว G303 เพราะผมจะไปสร้างไฟล์ไว้ใน /tmp และก็บอกเงื่อนไขบางอย่างที่ผมไม่อยากจะทำตาม ก็เลยสาธิตการ disable ให้ดูแบบนี้

จากนั้นเราก็ทดลองรันดูด้วยคำสั่ง

golangci-lint run ./...

เท่านี้เราก็จะสามารถใช้ gosec ผ่าน golangci-lint ได้ง่ายๆ

ยังมี linter ให้เราสามารถเปิดใช้งานได้อีกเยอะตามนี้ https://golangci-lint.run/usage/linters/

หวังว่าจะเป็นประโยชน์นะครับ

Top comments (0)