การเซ็ต Nginx ให้รองรับ Header CSRF ของ Joget

wk
1 min readAug 7, 2019

--

เนื่องจาก 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)
ตัวอย่าง Header ที่ส่งจาก Browser

การเซ็ต 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;
}
}
}

--

--

No responses yet