ปิดโทเค็น CSRF ในราง 3


105

ฉันมีแอพทางรถไฟที่ให้บริการ API บางตัวกับแอปพลิเคชัน iPhone ฉันต้องการเพียงแค่โพสต์บนทรัพยากรโดยไม่ต้องสนใจว่าจะได้รับโทเค็น CSRF ที่ถูกต้อง ฉันลองใช้วิธีการบางอย่างที่ฉันเห็นที่นี่ใน stackoverflow แต่ดูเหมือนว่าจะไม่ทำงานบนราง 3 อีกต่อไป

ขอบคุณที่ช่วยตอบ

คำตอบ:


175

ในตัวควบคุมที่คุณต้องการปิดใช้งาน CSRF ให้ทำเครื่องหมาย:

skip_before_action :verify_authenticity_token

หรือปิดการใช้งานสำหรับทุกอย่างยกเว้นไม่กี่วิธี:

skip_before_action :verify_authenticity_token, :except => [:update, :create]

หรือปิดใช้งานเฉพาะวิธีการที่ระบุ:

skip_before_action :verify_authenticity_token, :only => [:custom_auth, :update]

ข้อมูลเพิ่มเติม: RoR Request Forgery Protection


1
นี่คือคำตอบที่ถูกต้องสำหรับแอปที่มีการผสมผสานระหว่างแบบฟอร์มที่เข้าถึงได้บนเบราว์เซอร์และจุดสิ้นสุด API คำตอบจาก Markus Proske จะถูกต้องหากคุณแน่ใจอย่างแท้จริงว่าคุณจะไม่มีแบบฟอร์มใด ๆ ที่สามารถเข้าถึงได้จากเบราว์เซอร์ในแอปของคุณ
Asfand Qazi

สิ่งนี้ไปที่ไหนกันแน่? จะเกิดอะไรขึ้นถ้าส่วนควบคุมของอัญมณีบางชิ้น?
ทิ้งบัญชี

ฉันขอถามคุณว่าคุณสามารถตอบคำถามที่คล้ายกันนี้ได้หรือไม่? stackoverflow.com/questions/50159847/…

105

ใน Rails3 คุณสามารถปิดใช้งานโทเค็น csrf ในคอนโทรลเลอร์ของคุณสำหรับวิธีการเฉพาะ:

protect_from_forgery :except => :create 

12
ApplicationControllerสำหรับทุกคนที่อ่านทราบว่านี่คือสิ่งที่ควรจะไปใน การตอบสนองไมค์ลูอิสด้านล่าง ( skip_before_filter :verify_authenticity_token) ApplicationControllerเป็นวิธีการที่จะปิดการใช้งานบนพื้นฐานต่อการควบคุมสมมติว่าสืบทอดควบคุมจาก
NudeCanalTroll

ดูเหมือนว่านี้ไม่ปลอดภัยstackoverflow.com/questions/10676018/... คุณคิดอย่างไร? ใช่ไหม?
เว็บไซต์

@NudeCanalTroll คุณหมายถึงวางสิ่งนี้ไว้ในคอนโทรลเลอร์ที่ฉันต้องการให้มันไม่ทำงานเหรอ?
BlackDivine

ฉันขอถามคุณว่าคุณสามารถตอบคำถามที่คล้ายกันนี้ได้หรือไม่? stackoverflow.com/questions/50159847/…

32

ด้วยทางรถไฟ 4 ขณะนี้คุณมีตัวเลือกที่จะเขียนในแทนskip_before_actionskip_before_filter

# Works in Rails 4 and 5
skip_before_action :verify_authenticity_token

หรือ

# Works in Rails 3 and 4 (deprecated in Rails 4 and removed in Rails 5)
skip_before_filter :verify_authenticity_token

1
อะไรคือความแตกต่าง?
Adam D.Ruppe

ฉันขอถามคุณว่าคุณสามารถตอบคำถามที่คล้ายกันนี้ได้หรือไม่? stackoverflow.com/questions/50159847/…

John Sam เมื่อฉันมีเวลาฉันจะพยายามหลีกเลี่ยงมัน
jason328
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.