Khi deploy hệ thống ASP.NET WebForms cũ lên IIS hoặc server mới, bạn có thể gặp các lỗi sau ngay khi mở trang:
Kèm theo các vấn đề:
-
❌ Popup không tắt được
-
❌ Không tự redirect sau login
-
❌ Các control AJAX không hoạt động
-
❌ Console báo lỗi liên quan
ScriptResource.axd
🎯 Nguyên nhân gốc
Nguyên nhân chính không nằm ở code, mà do Content Security Policy (CSP) trên server quá chặt, dẫn đến:
-
Chặn
unsafe-eval → ASP.NET AJAX không chạy được
-
Chặn
unsafe-inline → script inline bị vô hiệu
-
Không cho phép load font/script ngoài
-
Làm hỏng
ScriptResource.axd
👉 Kết quả: object Sys không được khởi tạo → toàn bộ JS framework của WebForms bị lỗi
✅ Cách xử lý (không cần sửa code)
Chỉ cần cấu hình lại CSP trên server/IIS.
🔹 Thêm cấu hình vào web.config
🔍 Giải thích nhanh
| Directive | Ý nghĩa |
|---|
default-src | Nguồn mặc định |
script-src 'unsafe-inline' 'unsafe-eval' | Cho phép ASP.NET AJAX chạy |
style-src 'unsafe-inline' | Cho phép CSS inline |
font-src | Tránh lỗi font bị chặn |
img-src | Cho phép ảnh base64 |
👉 Quan trọng nhất là:
Nếu thiếu 2 cái này → WebForms cũ gần như chắc chắn lỗi
⚠️ Lưu ý bảo mật
Cấu hình trên nới lỏng CSP, vì:
-
unsafe-eval và unsafe-inline có thể tăng rủi ro XSS
-
Tuy nhiên đây là bắt buộc với hệ thống ASP.NET WebForms cũ
👉 Khuyến nghị:
-
Chỉ áp dụng cho hệ thống nội bộ hoặc legacy
-
Nếu hệ thống public → cân nhắc migrate sang ASP.NET Core
✅ Kết quả sau khi fix
Sau khi cấu hình đúng:
-
✔ Không còn lỗi
Sys is not defined
-
✔ Popup đóng/mở bình thường
-
✔ Login redirect hoạt động
-
✔ AJAX control chạy lại
-
✔ Không còn lỗi
ScriptResource.axd
🧠 Kinh nghiệm thực tế
99% các lỗi kiểu này khi deploy WebForms lên IIS mới là do:
-
CSP chặn script
-
IIS chặn
.axd
-
ASP.NET chưa đăng ký đúng
👉 Nhưng phổ biến nhất vẫn là CSP