Skip to content

2way-batch — Scorecard

Legend:

  • Critical = active security/data-loss/availability risk
  • High = correctness/maintainability hazard, real impact
  • Medium = friction/hygiene, ยังไม่เป็นอันตรายระดับ production-breaking ทันที

2way-batch (branch: master, 96 tracked files) มีพื้นผิวโจมตี HTTP ต่ำในสถานะ wiring ปัจจุบัน (ไม่มี business controller mount) แต่มีปัญหา correctness/ops จาก cron stub และ hardcode IP ใน LineService

อย่าคัดลอกค่า secret / password จริงลงเอกสาร — อ้างชื่อตัวแปรและ file:line


Score summary

Severityจำนวน
Critical0
High3
Medium7

Findings

IDSeverityคำอธิบายหลักฐาน (file:line)การแก้ไข
PERF-2WAYBATCH-01HighCron รันทุก 10 วินาที (EVERY_10_SECONDS) แต่ทำงานจริงแค่ log ข้อความเปล่า — สิ้นเปลือง CPU/log ในขณะที่ fetchApproval / fetchCreateOutScope ถูก comment ปิดsrc/crontab/survey/survey.task.service.ts:32-41 เทียบ method ที่ 43-172(1) เปิด logic จริงถ้ายังต้องใช้ หรือ (2) หยุด/ลดความถี่ cron และลบ stub
CORR-2WAYBATCH-01HighLineService.pushMassage hardcode http://10.188.128.126:9340/2way-batch/api/v1/line — ไม่ผ่าน env; และ LineController ไม่ได้ mount ใน AppModule ทำให้เส้นทาง push มีแนวโน้มพังถ้าเปิด cron logicsrc/modules/line/line.service.ts:25-26, เทียบ app.module.ts:37-44ย้าย URL ไป env; ชี้ไป gateway ที่ live จริง (ตรวจ path/port ให้ตรง)
CORR-2WAYBATCH-02HighMethods ที่ถูก comment ใช้ data.map(async ...) โดยไม่ await และเรียก pushMassage (Observable) / updateSurveys แบบ fire-and-forget — ถ้า uncomment โดยไม่แก้ จะได้ race/missed updatessurvey.task.service.ts:73-110, 140-171; line.service.ts:25-41ใช้ for...of + await / firstValueFrom; กัน cron overlap
SEC-2WAYBATCH-01MediumTypeORM encrypt: false บน MSSQL connectionapp.module.ts:30-33เปิด encrypt ตามมาตรฐานองค์กร
QUAL-2WAYBATCH-01Mediumโฟลเดอร์ announces / employees / uploadFiles (และ surveys/line controllers) มีไฟล์ครบแต่ไม่ import ใน AppModule — skeleton ค้างจาก 2way-apiapp.module.ts:37-44ลบหรือแยก package ให้เหลือเฉพาะที่ cron ใช้
QUAL-2WAYBATCH-02Mediumไม่มี .env.example — ไม่มีหลักฐานใน git ว่าต้องตั้ง env อะไรบ้างไม่พบไฟล์ .env* ที่ root จาก listing repoเพิ่ม .env.example จาก keys ใน configuration.ts (โดยไม่ใส่ secret จริง)
QUAL-2WAYBATCH-03MediumDockerfile EXPOSE 3000 แต่ nginx/swagger/hardcode ชี้ 9340Dockerfile:24, nginx/conf.d/default.conf:8, docs/document.config.ts:8ทำให้พอร์ตตรงกันทั้ง EXPOSE / compose / docs
LEG-2WAYBATCH-01MediumBuild/runtime ใช้ node:16-alpine (EOL กันยายน 2023); CI image node:16Dockerfile:1,15, bitbucket-pipelines.yml:6อัปเกรด Node 18/20 LTS
OBS-2WAYBATCH-01MediumTypeORM logging: ['error','query'] ใน connection factory — query log เต็มใน production ถ้าเปิดระดับนี้จริงapp.module.ts:28จำกัดเป็น error ใน production
QUAL-2WAYBATCH-04MediumControllers ที่ตายส่วนใหญ่ติด @Public(); repository มี raw SQL interpolate empCode ใน findByConditionV2 — ถ้า uncomment module โดยไม่ review จะเปิด API กว้าง / injection surfaceตัวอย่าง line.controller.ts:13-16; surveys.repository.ts:70ก่อนเปิด module ให้ทบทวน auth ทุก endpoint และเลิก string-build SQL

สิ่งที่ตรวจแล้ว vs ยังไม่ตรวจ

ตรวจแล้ว (branch master):

  • AppModule imports และ comment blocks
  • SurveyTaskService ทั้งไฟล์
  • LineService.pushMassage hardcode URL + Observable return
  • SurveysService / SurveysUtil.initializer wiring
  • configuration.ts, main.ts, Dockerfile, nginx default.conf
  • bitbucket-pipelines.yml branch triggers
  • ไม่มี .env.example

ยังไม่ตรวจ:

  • ว่า production ยังรัน process นี้จริงหรือไม่
  • ว่า 10.188.128.126:9340 ยังเป็น host ที่ถูกต้อง
  • เนื้อหาเต็มของทุก entity column / dao.updateSurvey transaction details
  • ค่า secret จริงใน deployment (ไม่ควรใส่ในเอกสาร)

สรุปเชิงภาพรวม

2way-batch ไม่มี Critical security finding จาก HTTP surface ในสถานะปัจจุบัน แต่เป็น worker ที่ตื่นถี่โดยไม่มีงาน — และมี hardcode IP ในเส้นทาง LINE ที่จะพัง/ผิดที่ถ้าเปิด business cron กลับโดยไม่แก้ wiring ควรตัดสินใจว่าจะรวมงานเข้า 2way-api หรือฟื้น batch ให้ครบพร้อม gateway ที่ถูกต้อง