สมัยนี้เวลาทำเว็บหรือระบบอะไรสักอย่าง ต้องคิดเสมอว่า
Jul 26, 2017 · 1 min read
- มีคนมา scan port แน่ ๆ อย่าลืม firewall
- ssh ตั้งรหัสให้ยาก ๆ หรือไม่ก็ใช้ public key ไปเลย
- มี request แปลก ๆ เข้ามาตลอดเวลา
- โดนยิงแน่นอนล้าน % ทำ rate limit ไว้ด้วย
- มี input แปลก ๆ เข้ามาแน่นอนถึงแม้ว่าจะ validate ที่ frontend แล้ว อย่าลืม validate อีกที ที่ backend ด้วย
- logout ต้อง logout จริง ๆ ไม่ใช่แค่ลบค่าแค่บน client
- UGC โดน XSS แน่นอน อย่าลืม sanitize
- สมัยนี้ไม่น่ามีคนใช้ http ละมั้ง ?
- backend ต่อ database ถ้าไม่ใช่ internal network ให้ใช้ tls เสมอ หรือถ้า database ไม่ support ให้ต่อผ่าน tls proxy เสมอ
- backend คุยกันเอง ถ้าไม่ใช่ internal network ให้คุยผ่าน https เสมอ (ใช้ self-signed ก็ได้ แต่ verify ca ด้วย)
- Cookie ใส่ HttpOnly + Secure (+ SameSite) ด้วย
- ใส่ HSTS ด้วย ถ้าเป็นไปได้ใช้ includeSubDomains (+ preload) ไปเลย
- อย่าเก็บรหัสผ่านตรง ๆ ลง database (สมัยนี้ไม่น่ามีคนทำแบบนี้แล้วมั้ง) แล้วก็อย่าใช้ hash function ที่ไม่ปลอดภัย มา hash password (เช่น md5 เลิกใช้ได้แล้ว)
- hash session id ก่อนเก็บลง database ด้วยก็ดี เวลามีคนอ่าน database จะได้เอา session มาใช้ไม่ได้
- ระบบ authen ควรเป็น stateful จะได้ revoke ได้
- ถ้าไม่ได้ทำ open api, cors เปิดแค่เว็บเราก็พอ ไม่ต้องใจดีเปิดให้ทุกคนใช้
- อย่าลืม verify Origin/Referer ด้วย (Referer นะ ไม่ใช่ Referrer)
- normalize email ก่อนเก็บลง database ด้วย!!!
- พวก public static file ตั้งชื่อให้ไม่ซ้ำแล้วใส่ cache control จัดเต็มไปเลย
- http server อย่าลืมใส่ read/write/idle timeout ด้วย
- อ่าน data จาก user (json, form, ฯลฯ) ให้ limit size ด้วย (เช่นใช้ LimitReader มาครอบ body)
- SQL Injection คงไม่ต้องพูดถึงละมั้ง คงไม่มีใครใช้ string concat หรอกนะ
- ระวังเรื่อง memory leak ด้วย
- auto backup database ทุกวัน
- ก่อนทำอะไรกับ database ให้รัน backup ก่อนเสมอ
- อย่าเอา credential push ขึ้น git ทั้ง public และ private repo ถึงลบแล้ว มันก็จะอยู่ใน history (นอกจากจะ force push แก้ history)
เดบิต : ไปเจอมาใน facebook จำไม่ได้ละ
