ASP.NET Core นั้นมาแรงทีเดียวกับการใช้พัฒนาเว็บแอพพลิเคชั่นในปัจจุบันด้วย C#.NET และการเอามาใช้งานกับ Docker ได้ก็ยิ่งเพิ่มความสะดวกสบายขึ้นไปอีก
ทีนี้พลไปเจอเทคนิคเสริมความปลอดภัยให้กับ ASP.NET Core ที่รันบน Docker มาครับ โดยเทคนิคนี้เป็นของ Muhammad Rehan Saeed ที่แชร์กันในกลุ่ม
เลยขอสรุปวิธีการเป็นภาษาไทยมาให้ลองเอาไปใช้งานกันครับ
รัน ASP.NET Core แบบ Read-only
วิธีการของ Muhammad คือเราสามารถตั้งให้ Docker รันทำงานในโหมด Read-only อย่างเดียว เพื่อป้องกันผู้บุกรุกเข้ามาเปลี่ยนแปลงไฟล์ที่ deploy ลงไปใน Docker ไว้แล้ว
โดย Dockerfile สามารถเขียนได้แบบนี้
FROM microsoft/dotnet:2.2-sdk AS builder
WORKDIR /source
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish --output /app/ --configuration Release
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=builder /app .
ENTRYPOINT ["dotnet", "ReadOnlyTest.dll"]
ทีนี้ถ้าเรารัน docker โดยใช้คำสั่งทั่วไป แบบด้านล่าง
docker run --rm --read-only -it -p 8000:80 read-only-test
จะทำให้เกิด Error ต่อไปนี้ครับ
Failed to initialize CoreCLR, HRESULT: 0x80004005
ดังนั้น Muhammad เลยแนะนำว่า ควรรัน docker โดยเพิ่ม option ตัวหนึงที่ชื่อ COMPlus_EnableDiagnostics=0
เข้าไปในคำสั่ง
docker run --rm --read-only -it -p 8000:80 -e COMPlus_EnableDiagnostics=0 read-only-test
โดยค่าดังกล่าว จะปิดการทำงานของส่วน debugging และ profiling นั่นเอง ซึ่งการรัน Docker ขึ้นมาด้วยคำสั่งดังกล่าวจะทำให้เว็บแอพพลิเคชั่นที่สร้างจาก ASP.NET Core ทำงานได้อย่างไม่มีปัญหา แถมปลอดภัยเพิ่มขึ้นด้วยครับ
สนใจก็สามารถลองเอา source code จาก Repository นี้มาทดสอบดูครับผม
อ้างอิง – Securing ASP.NET Core in Docker