0Pricing
Ruby Academy · บทเรียน

พารามิเตอร์แบบเข้มงวด

พารามิเตอร์ที่ปลอดภัย

พารามิเตอร์แบบเข้มงวด เป็นบทเรียน 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::ParameterMissing

permit! อันตราย

คุณสามารถเรียกใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เส้นทางและทรัพยากร
  2. ตัวควบคุมและการดำเนินการ
  3. พารามิเตอร์แบบเข้มงวด
  4. มุมมองและการเรนเดอร์
← กลับไปที่ Ruby Academy