เนื่องจาก Joget มีการใช้ Header ชื่อ OWASP_CSRFTOKEN
เพื่อป้องกันการโจมตีแบบ Cross-site Request Forgery (CSRF) Header นี้ไม่ใช่ Standard ของ Http และจะถูกตัดออกเมื่อส่งผ่าน Proxy (Nginx)
เมื่อ Web Server (Tomcat) ไม่ได้รับ Header จะทำให้เกิด Security violation และไม่สามารถใช้งานบางฟังก์ชัน
ตัวอย่าง การ Publish app โดยไม่มี OWASP_CSRFTOKEN
org.owasp.csrfguard.CsrfGuard - potential cross-site request forgery (CSRF) attack thwarted (user:<anonymous>, ip:172.22.0.4, method:POST, uri:/jw/web/console/app/multiApproval/1/publish, error:required token is missing from the request)
การเซ็ต Nginx ให้รับ Header OWASP_CSRFTOKE
คือ ต้องเปิด Options underscores_in_headers
ในไฟล์ nginx.conf เป็น on
ตัวอย่าง
events {
worker_connections 4096;
}http {
sendfile on;
underscores_in_headers on; server {
listen 443 ssl;
proxy_redirect off;
server_name my-site.com;
ssl_certificate /etc/nginx/my-site.com.crt;
ssl_certificate_key /etc/nginx/my-site.com.key; location / {
proxy_pass https://joget:8443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forworded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forworded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}