- ตรวจสอบเหตุผลเฉพาะที่ทำให้ถูกปฏิเสธก่อนทำการเปลี่ยนแปลงการตั้งค่า
- กำหนดค่า URL สาธารณะและตรวจสอบว่าสามารถเข้าถึงคอนเทนเนอร์ได้
- สร้างบริการขึ้นใหม่เพื่อใช้ตัวแปรสภาพแวดล้อม
- ตรวจสอบคุกกี้และส่วนหัวโดยไม่ต้องปิดใช้งานการป้องกัน CSRF
หาก Paperless-ngx แสดง 403 ห้ามเข้าถึง: การตรวจสอบ CSRF ล้มเหลว เมื่อเข้าสู่ระบบ แอปพลิเคชันปฏิเสธการตรวจสอบความปลอดภัยของคำขอ ซึ่งมักเกิดขึ้นหลังจากเปลี่ยนโดเมน เปิดใช้งาน HTTPS หรือกำหนดค่าพร็อกซีแบบย้อนกลับ แต่ก็อาจเกี่ยวข้องกับคุกกี้หรือแบบฟอร์มที่ล้าสมัยได้เช่นกัน
วิธีแก้ปัญหาคือการระบุสาเหตุที่เฉพาะเจาะจง ตรวจสอบ URL สาธารณะ และตรวจสอบให้แน่ใจว่าการตั้งค่าดังกล่าวส่งไปถึง Paperless แล้ว คุณไม่จำเป็นต้องปิดใช้งานการป้องกัน CSRF หรือแก้ไขสิทธิ์การเข้าถึงเอกสาร
ระบุสาเหตุที่ทำให้เกิดข้อผิดพลาด CSRF ใน Paperless-ngx

Django ใช้คุกกี้และโทเค็น รวมถึงการตรวจสอบแหล่งที่มาของคำขอ เพื่อทำให้เว็บไซต์อื่นส่งการกระทำโดยใช้ประโยชน์จากเซสชันของผู้ใช้ได้ยากขึ้น
ตรวจสอบให้แน่ใจว่าประกาศดังกล่าวระบุอย่างชัดเจนถึงเรื่องนี้ การตรวจสอบ CSRF ล้มเหลวข้อผิดพลาด 403 ที่เกิดจาก Cloudflare, กฎพร็อกซี หรือระบบการเข้าถึงภายนอก อาจมีสาเหตุอื่นได้เช่นกัน
หากคุณใช้ Docker Compose ให้ลองทำซ้ำขั้นตอนที่ทำให้เกิดข้อผิดพลาดและตรวจสอบบันทึก:
docker compose logs --tail=100 webserver
ในตัวอย่างที่เราใช้ webserver ใช้เป็นชื่อบริการ แทนที่ด้วยชื่อของการปรับใช้ของคุณ มองหาข้อมูลอ้างอิงถึง django.security.csrf และเหตุผลในการปฏิเสธ
- การตรวจสอบแหล่งที่มาล้มเหลว: ตรวจสอบแหล่งที่มาที่ปรากฏในประกาศและการตั้งค่าสาธารณะ
- ไม่ได้ตั้งค่าคุกกี้ CSRF: ตรวจสอบว่าเบราว์เซอร์รับและเก็บรักษาคุกกี้ไว้หรือไม่
- โทเค็นหายไปหรือไม่ถูกต้อง: กรุณารีเฟรชหน้าเว็บก่อนส่งแบบฟอร์ม
- การตรวจสอบแหล่งที่มาของข้อมูลล้มเหลว: ตรวจสอบส่วนหัวและเข้าถึงผ่าน HTTPS
กำหนดค่า PAPERLESS_URL ด้วยที่อยู่สาธารณะที่ถูกต้อง

สำหรับที่อยู่สาธารณะที่ไม่ซ้ำกัน ให้กำหนดค่า ลิงก์แบบไร้กระดาษระบุโปรโตคอลและพอร์ตหากไม่ใช่ค่าเริ่มต้น แต่ไม่ต้องเพิ่มเครื่องหมายทับหรือพาธต่อท้าย เช่น /accounts/login/.
ตัวอย่างเช่น:
PAPERLESS_URL=https://documentos.example.com
ตัวแปรนี้ใช้ในการกำหนดค่าร่วมกันสำหรับโฮสต์ที่อนุญาต, CORS และแหล่งที่มาของ CSRF ที่เชื่อถือได้ ระบบจะไม่แปลงที่อยู่ทั้งหมดให้เป็นค่าเทียบเท่าโดยอัตโนมัติ จากนั้นคุณสามารถเปิดใช้งานอินสแตนซ์ได้
หากคุณเผยแพร่ Paperless ภายใต้เส้นทางย่อย เช่น https://example.com/paperlessอย่าใส่เส้นทางนั้นลงใน PAPERLESS_URL การใช้งานแบบนั้นต้องกำหนดค่าคำนำหน้าและพร็อกซีแยกต่างหาก
ตรวจสอบให้แน่ใจว่า Docker ได้รับตัวแปรนั้นแล้ว
ไฟล์ .env สามารถใช้เพื่อแทนที่ค่าต่างๆ ใน Compose ได้ แต่ตัวแปรเหล่านี้จะไม่ถูกรวมเข้ากับสภาพแวดล้อมของบริการทั้งหมดโดยอัตโนมัติ
คุณสามารถเพิ่มโค้ดส่วนนี้ลงในบริการ Paperless ที่มีอยู่ได้:
services:
webserver:
environment:
PAPERLESS_URL: "https://documentos.example.com"
ผสานการปรับแต่งโดยไม่ต้องแทนที่ส่วนที่เหลือของไฟล์ Compose ของคุณ คงไว้ซึ่งรูปภาพ ปริมาณ ความสัมพันธ์ และตัวแปรอื่นๆ ที่คุณเคยใช้ไปแล้ว
หากคุณต้องการบันทึกการตั้งค่าลงในไฟล์ โปรดระบุให้ชัดเจน:
services:
webserver:
env_file:
- paperless.env
และภายใน paperless.env:
PAPERLESS_URL=https://documentos.example.com
ตรวจสอบความเป็นไปได้ของการซ้ำซ้อน: หากตัวแปรนั้นปรากฏอยู่ในรายการอื่นด้วย environmentค่าดังกล่าวจะมีผลเหนือกว่าค่าที่กำหนดไว้ใน env_file.
ทำการเปลี่ยนแปลงโดยการสร้างบริการขึ้นใหม่

หลังจากเปลี่ยนค่าตัวแปรแล้ว ให้รันคำสั่งจากโปรเจ็กต์ Compose ที่เกี่ยวข้อง:
docker compose up -d --no-deps --force-recreate webserver
ตัวอย่างนี้สมมติว่าบริการที่เกี่ยวข้องทำงานอยู่แล้ว โดยจะสร้าง Paperless ขึ้นมาใหม่โดยไม่ได้หยุดฐานข้อมูลและส่วนอื่นๆ ของระบบโดยเจตนา
คำสั่ง `docker compose restart` แบบธรรมดาจะไม่ทำการอัปเดตสภาพแวดล้อมของคอนเทนเนอร์ นอกจากนี้ คุณไม่จำเป็นต้องลบข้อมูลใดๆ เพื่อใช้การปรับเปลี่ยนเหล่านี้
ตรวจสอบค่าที่ได้รับ:
docker compose exec webserver printenv PAPERLESS_URL
หากไม่พบที่อยู่ที่คาดหวัง โปรดตรวจสอบไฟล์ที่แก้ไข บริการ และตัวแปรที่ซ้ำกัน หากคุณใช้ตัวเลือกต่างๆ เช่น -f หรือชื่อโปรเจ็กต์เฉพาะเจาะจง ระบบจะยังคงรักษาตัวเลือกเหล่านั้นไว้ในคำสั่งต่างๆ
ควรใช้ PAPERLESS_CSRF_TRUSTED_ORIGINS เมื่อใด
PAPERLESS_CSRF_TRUSTED_ORIGINS ไม่ใช่ตัวแปรที่ล้าสมัย อนุญาตให้คุณประกาศแหล่งข้อมูลเพิ่มเติมสำหรับคำขอที่ได้รับการป้องกัน CSRF
ตัวอย่างเช่น สำหรับสองทิศทางที่เชื่อถือได้:
PAPERLESS_CSRF_TRUSTED_ORIGINS=https://documentos.example.com,https://archivo.example.com
ใช้แหล่งข้อมูลที่ระบุ พร้อมโปรโตคอลและพอร์ตหากจำเป็น อย่าสับสนรายการนี้กับ PAPERLESS_ALLOWED_HOSTSโดยที่ชื่อโฮสต์ถูกกำหนดค่าโดยไม่มีโปรโตคอล
การอนุญาตแหล่งที่มาไม่ได้แทนที่การตั้งค่าโดเมน ใบรับรอง หรือพร็อกซี แต่เป็นการเพิ่มที่อยู่ที่คุณใช้งานและควบคุมได้จริงเท่านั้น
ตรวจสอบส่วนหัว HTTPS และ Reverse Proxy

พร็อกซีต้องส่งข้อมูลโฮสต์และรูปแบบภายนอกอย่างถูกต้อง การเปลี่ยนโฮสต์ไม่ใช่ข้อบังคับเมื่อใช้ Nginx Proxy Manager, Traefik หรือ Cloudflare Tunnel ขึ้นอยู่กับการตั้งค่าของแต่ละตัว
หากเบราว์เซอร์ใช้ HTTPS และพร็อกซีสื่อสารกับ Paperless ผ่าน HTTP อาจจำเป็นต้องระบุวิธีการรับรู้การเชื่อมต่อภายนอกที่ปลอดภัย:
PAPERLESS_PROXY_SSL_HEADER='["HTTP_X_FORWARDED_PROTO", "https"]'
รูปแบบนี้ตรงกับไฟล์ตัวแปร อย่าเปิดใช้งานโดยไม่ตรวจสอบพร็อกซีก่อน: คุณต้องกำหนดหรือเขียนทับส่วนหัวนั้นอย่างน่าเชื่อถือ โดยหลีกเลี่ยงการยอมรับค่าที่ไม่แน่นอนที่ส่งมาจากไคลเอ็นต์ภายนอก
ในเครือข่ายที่มีพร็อกซีหลายตัว ให้ตรวจสอบรูปแบบการเชื่อมต่อที่ไปถึงปลายทางสุดท้าย ไม่ควรเปิดใช้งานตัวเลือกความเชื่อถือในส่วนหัวที่ส่งต่อทั้งหมดในลักษณะที่ใช้ได้กับทุกกรณี
หากบันทึกแสดงแหล่งที่มา null หรือปัญหาเกี่ยวกับผู้แนะนำ โปรดตรวจสอบนโยบายการแนะนำที่ใช้กับแบบฟอร์มด้วย เอกสารวิกิของโครงการมีข้อมูลเกี่ยวกับปัญหาการเข้าถึงที่เกี่ยวข้องกับเรื่องนี้ Referrer-Policy: no-referrerการแก้ไข URL ที่อนุญาตอาจไม่เพียงพอในกรณีนั้น
ลบคุกกี้เก่าและแบบฟอร์มที่ล้าสมัยทิ้งไป
เมื่อแก้ไขการตั้งค่าเซิร์ฟเวอร์เสร็จแล้ว ให้เปิดที่อยู่เว็บสุดท้ายอีกครั้งและโหลดแบบฟอร์มล็อกอินใหม่ หลีกเลี่ยงการส่งข้อมูลจากแท็บเก่าหรือการสลับไปมาระหว่าง HTTP, HTTPS, IP และโดเมนระหว่างการทดสอบ
หากปัญหาเกี่ยวข้องกับคุกกี้หรือโทเค็น ลองใช้โหมดการเรียกดูแบบส่วนตัว หรือลบข้อมูลจากเว็บไซต์ Paperless ทิ้งไปเลย นอกจากนี้ ตรวจสอบดูว่ามีส่วนขยายใดปิดกั้นคุกกี้หรือแก้ไขคำขอหรือไม่
เป้าหมายคือเพื่อให้เบราว์เซอร์ พร็อกซี และแอปพลิเคชันมีที่อยู่การเข้าถึงและบริบทที่ตรงกัน การปิดใช้งาน CSRF การขยายแหล่งข้อมูลโดยไม่เลือกปฏิบัติ หรือการลบข้อมูลการปรับใช้ ไม่ได้แก้ปัญหาที่ต้นเหตุ.
ฉันเป็นผู้ชื่นชอบเทคโนโลยีที่เปลี่ยนความสนใจ "เกินบรรยาย" ของเขาให้กลายเป็นอาชีพ ฉันใช้เวลามากกว่า 10 ปีในชีวิตไปกับเทคโนโลยีล้ำสมัยและปรับแต่งโปรแกรมทุกประเภทด้วยความอยากรู้อยากเห็น ตอนนี้ฉันมีความเชี่ยวชาญในด้านเทคโนโลยีคอมพิวเตอร์และวิดีโอเกม เนื่องจากเป็นเวลากว่า 5 ปีแล้วที่ฉันเขียนให้กับเว็บไซต์ต่างๆ เกี่ยวกับเทคโนโลยีและวิดีโอเกม โดยสร้างบทความที่พยายามให้ข้อมูลที่คุณต้องการในภาษาที่ทุกคนเข้าใจได้
หากคุณมีคำถามใดๆ ความรู้ของฉันมีตั้งแต่ทุกอย่างที่เกี่ยวข้องกับระบบปฏิบัติการ Windows รวมถึง Android สำหรับโทรศัพท์มือถือ และความมุ่งมั่นของฉันคือคุณ ฉันยินดีสละเวลาสักครู่เสมอและช่วยคุณแก้ไขคำถามใดๆ ที่คุณอาจมีในโลกอินเทอร์เน็ตนี้