พารามิเตอร์แบบเข้มงวด
พารามิเตอร์ที่ปลอดภัย
พารามิเตอร์แบบเข้มงวด เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการกำหนดค่าจำนวนมาก
แบบฟอร์มจะส่งข้อมูลหลายช่องมาพร้อมกัน หากคุณส่งข้อมูลทั้งหมดไปยังโมเดลโดยไม่ตรวจสอบ ผู้โจมตีอาจเพิ่มช่องที่คุณไม่เคยตั้งใจให้แก้ไขได้ เช่น กำหนดค่า admin: true นี่คือช่องโหว่การกำหนดค่าจำนวนมาก
- อย่าเชื่อถือข้อมูลจากผู้ใช้โดยเด็ดขาด
- คุณต้องระบุรายการช่องที่อนุญาต
- Rails บังคับใช้กฎนี้ด้วยพารามิเตอร์แบบเข้มงวด
พารามิเตอร์แบบเข้มงวดคืออะไร
พารามิเตอร์แบบเข้มงวดกำหนดให้คุณต้องประกาศอย่างชัดเจนว่าพารามิเตอร์ใดที่โมเดลรับได้ Rails จะยกข้อผิดพลาดหากคุณพยายามกำหนดค่าจำนวนมากด้วยพารามิเตอร์ที่ไม่ได้รับอนุญาต
วิธีนี้เปลี่ยนช่องโหว่ด้านความปลอดภัยที่อาจเกิดขึ้นโดยไม่รู้ตัวให้กลายเป็นรายการช่องข้อมูลที่ต้องเลือกเปิดใช้และตรวจทาน
require และ permit
รูปแบบนี้ใช้สองเมธอด:
require(:model)ตรวจสอบว่ามีคีย์ระดับบนสุดอยู่permit(:field, ...)ระบุช่องข้อมูลภายในที่อนุญาต
def article_params
params.require(:article).permit(:title, :body)
endการใช้ตัวช่วย
กำหนดเมธอดส่วนตัวชื่อ model_params แล้วเรียกใช้เมื่อคุณสร้างหรือปรับปรุงข้อมูล อย่าส่ง params ดิบไปยังโมเดลโดยเด็ดขาด
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :body)
endเหตุใดจึงใช้เมธอดส่วนตัว
การเก็บรายการช่องที่อนุญาตไว้ในเมธอดส่วนตัวเดียวมีข้อดีดังนี้:
createและupdateใช้กฎเดียวกัน- ค้นหาและตรวจทานช่องที่อนุญาตได้ง่าย
- เมธอดนี้ไม่เปิดให้เรียกเป็นการทำงานของตัวควบคุม เพราะเมธอดส่วนตัวไม่สามารถกำหนดเส้นทางได้
สิ่งที่ถูกกรองออก
คีย์ที่ส่งมาใด ๆ ซึ่งไม่อยู่ในรายการ permit จะถูกตัดออกก่อนถึงโมเดล หากแบบฟอร์มมี admin อยู่ด้วย แต่คุณอนุญาตเฉพาะ title และ body ค่า admin จะถูกละเว้นโดยไม่แจ้งเตือน ทำให้ระเบียนยังปลอดภัย
การอนุญาตอาร์เรย์
สำหรับรายการช่องทำเครื่องหมายหรือช่องเลือกหลายรายการที่ส่งอาร์เรย์มา ให้ส่งอาร์เรย์ว่างเป็นค่าเพื่ออนุญาต วิธีนี้ทำให้คีย์ดังกล่าวมีค่าได้หลายรายการ
params.require(:article).permit(:title, tag_ids: [])การอนุญาตแฮชซ้อน
สำหรับแอตทริบิวต์แบบซ้อน ซึ่งเป็นแบบฟอร์มที่แก้ไขข้อมูลหลักและข้อมูลย่อยพร้อมกัน ให้ระบุคีย์แบบซ้อนที่อนุญาตด้วยแฮชซึ่งอธิบายช่องข้อมูลภายใน
params.require(:order).permit(
:customer_name,
items_attributes: [:product_id, :quantity]
)การจัดการพารามิเตอร์ที่หายไป
หากไม่มีคีย์ที่จำเป็น require จะยก ParameterMissing ซึ่ง Rails จะแสดงผลเป็น 400 คำขอไม่ถูกต้อง วิธีนี้ช่วยปกป้องการทำงานจากคำขอที่มีรูปแบบไม่ถูกต้องโดยอัตโนมัติ
# Missing :article key raises:
# ActionController::ParameterMissingpermit! อันตราย
คุณสามารถเรียกใช้ params.permit! เพื่ออนุญาตทุกอย่างได้ แต่การทำเช่นนี้จะเปิดช่องโหว่จากการกำหนดค่าแบบกลุ่มขึ้นมาอีกครั้ง โปรดหลีกเลี่ยง ยกเว้นในบริบทภายในที่เชื่อถือได้ โปรดเลือกรายการอนุญาตที่ระบุไว้อย่างชัดเจนเสมอ
แนวทางปฏิบัติที่ดี
รักษาความปลอดภัยให้พารามิเตอร์:
- เลือกรายการช่องข้อมูลที่จำเป็นขั้นต่ำ
- อย่าอนุญาตแฟล็กที่มีความละเอียดอ่อน เช่น
roleหรือadminจากแบบฟอร์มสาธารณะโดยเด็ดขาด - กำหนดช่องข้อมูลเหล่านี้อย่างชัดเจนในตัวควบคุมตามตรรกะฝั่งเซิร์ฟเวอร์
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับพารามิเตอร์แบบเข้มงวด
สรุป: พารามิเตอร์แบบเข้มงวด
คุณได้เรียนรู้การกรองข้อมูลขาเข้าอย่างปลอดภัย:
- การกำหนดค่าแบบกลุ่มเป็นความเสี่ยงด้านความปลอดภัยที่เกิดขึ้นจริง
requireบังคับใช้คีย์ระดับบนสุด ส่วนpermitจะกำหนดรายการช่องข้อมูลที่อนุญาต- เก็บรายการอนุญาตไว้ในเมธอดส่วนตัวที่ใช้ร่วมกัน
- อนุญาตอาร์เรย์และแฮชซ้อนกันเมื่อจำเป็น
- หลีกเลี่ยง
permit!และอย่าอนุญาตแฟล็กที่มีความละเอียดอ่อนโดยเด็ดขาด
ต่อไป เราจะส่งคืนการตอบสนองด้วยมุมมองและการแสดงผล
คำถามที่พบบ่อย
บทเรียน “พารามิเตอร์แบบเข้มงวด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พารามิเตอร์แบบเข้มงวด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์แบบเข้มงวด”
พารามิเตอร์ที่ปลอดภัย คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “พารามิเตอร์แบบเข้มงวด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เส้นทางและทรัพยากร
- ตัวควบคุมและการดำเนินการ
- พารามิเตอร์แบบเข้มงวด
- มุมมองและการเรนเดอร์