ทำไมการป้องกัน CSRF จึงจำเป็นสำหรับการสั่งซื้อสินค้า


15

วีโอไอพีมีตั้งแต่เวอร์ชันล่าสุดและform_keyเป็นส่วนหนึ่งของการกระทำเพื่อสั่งซื้อเพื่อป้องกันการโจมตีด้วย CSRF ฉันคิดว่า

ดังนั้นตอนนี้ฉันสงสัยว่ามันจำเป็นสำหรับสถานที่แห่งนี้จริง ๆ หรือไม่และทำไมจึงพูดได้ดีกว่าว่าจะป้องกันสถานการณ์ใด


1
ฉันต้องการคำตอบที่ดีกว่าmagento.stackexchange.com/questions/59153/
Claudiu Creanga

คำตอบ:


14

ฉันเชื่อว่ามันยากที่จะหาคำตอบที่ชัดเจนสำหรับคำถามนี้ว่าทำไมโทเค็น CSRF จึงจำเป็นต้องมี "จำเป็น" ใน Magento เพื่อเพิ่มการสั่งซื้อ GET ฉันจะพยายามตีความวัตถุประสงค์ของมัน ฉันไม่เคยเป็นผู้เชี่ยวชาญด้านความปลอดภัยและนี่คือการตีความของฉันเกี่ยวกับ CSRF ในบริบทเฉพาะนี้

บริบท

จากowasp.org

การปลอมแปลงคำขอข้ามไซต์ (CSRF) เป็นการโจมตีที่บังคับให้ผู้ใช้ปลายทางดำเนินการกระทำที่ไม่พึงประสงค์บนเว็บแอปพลิเคชันที่พวกเขากำลังตรวจสอบความถูกต้องในปัจจุบัน CSRF โจมตีเป้าหมายที่ร้องขอการเปลี่ยนแปลงสถานะโดยเฉพาะไม่ใช่การขโมยข้อมูลเนื่องจากผู้โจมตีไม่มีวิธีที่จะเห็นการตอบสนองต่อคำขอปลอมแปลง

ตัวอย่างหนึ่งของการโจมตีนี้คือการฝังภาพที่ซ่อนอยู่ในอีเมลหรือหน้าเว็บสำรอง:

<img src="http://shop.com/cart/add?sku=sprocket&qty=5" width="0" height="0" border="0">

เว็บเซิร์ฟเวอร์จะไม่แยกความแตกต่างว่าคำขอมาจากไหนและจะเพิ่มสินค้าลงในรถเข็นของผู้ใช้รายนั้นอย่างซื่อสัตย์

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

เกี่ยวกับการเปลี่ยนแปลงสถานะและวิธีการ HTTP, RFC 2616พูดว่า:

โดยเฉพาะอย่างยิ่งการประชุมได้รับการจัดตั้งขึ้นว่าวิธีการ GET และหัวไม่ควรมีความสำคัญของการดำเนินการอื่นนอกเหนือจากการดึง วิธีการเหล่านี้ควรได้รับการพิจารณาว่า "ปลอดภัย"

Magento และ CSRF

Magento ใช้กลไกการป้องกัน CSRF สำหรับทั้งผู้ดูแลระบบและส่วนหน้าโดยใช้โทเค็น (คีย์ฟอร์ม) ฉันคิดว่าเป้าหมายของ Magento ในฐานะที่เป็นแพลตฟอร์มที่นักพัฒนาคนอื่น ๆ สร้างขึ้นเพื่อรักษาความปลอดภัยให้กับคำร้องขอการเปลี่ยนแปลงสถานะทั้งหมด สาเหตุที่พวกเขาไม่ทราบว่านักพัฒนาที่ใช้งานหรือส่วนขยายของบุคคลที่สามอาจเปิดเผยโดยไม่ได้ตั้งใจ ปลอดภัยกว่าที่จะร้องขอการเปลี่ยนแปลงสถานะทั้งหมดให้ปลอดภัยกว่าที่จะมีบางสิ่งที่เปิดเผยโดยโมดูลบุคคลที่สามและเป็น PR ที่ไม่ดีสำหรับแพลตฟอร์ม ฉันไม่รู้จริง ๆ ว่าการร้องขอการเปลี่ยนสถานะทั้งหมดนั้นปลอดภัยจากการโจมตี CSRF หรือไม่

สิ่งหนึ่งที่ควรทราบคือ Magento ไม่ได้ใช้แบบฟอร์มเพื่อปกป้องคำขอเปลี่ยนแปลงสถานะเสมอไป ตัวอย่างเช่นคำขอลบจากรถเข็น ( /checkout/cart/delete/id/{ID}) และลบที่อยู่ลูกค้า ( /customer/address/delete/id/{ID}) เป็นทั้งคำขอ GET ที่ส่งผ่านรหัสเอนทิตี จากนั้นคอนโทรลเลอร์ (หรือรุ่น) จะจัดการให้มั่นใจว่าผู้ใช้ได้รับอนุญาตให้ลบข้อมูลเอนทิตีเหล่านั้น (แก้ไขสถานะ) เหล่านี้มีสองกรณีที่วีโอไอพีไม่เป็นไปตามRFC 2616 เพื่อความเป็นธรรมสำหรับบางกรณีการใช้งานอาจไม่เหมาะสมหรือจำเป็นต้องทำเช่นนั้น

ปรากฏว่ามีการเพิ่มการตรวจสอบคีย์ฟอร์มในMage_Checkout_CartController::addActionวิธีการในเวอร์ชัน 1.8 จากบันทึกประจำรุ่นเรามีสิ่งต่อไปนี้ที่จะไป:

แก้ไขปัญหาที่อาจส่งผลให้เกิดการปลอมแปลงคำขอข้ามไซต์ (CSRF) ในร้านค้าบนเว็บ

น่าเสียดายที่ภาษานั้นคลุมเครือและ "อาจมี" ทำให้ฉันเชื่อว่าเป็นเพราะข้อสันนิษฐานที่ฉันระบุไว้ก่อนหน้านี้: คำขอเปลี่ยนสถานะที่ปลอดภัย อาจมีความเป็นไปได้ที่จะส่งพารามิเตอร์เพิ่มเติมซึ่งทำให้เกิดพฤติกรรมที่ไม่ได้ตั้งใจ:/checkout/cart/add/product/337/email/new@address.com/password/l33tp4ssw0rd

แนวคิดที่ว่าโดยการเพิ่มบางสิ่งลงในรถเข็นมีโค้ดบางส่วน (คอร์หรือบุคคลที่สาม) ซึ่งเกิดขึ้นระหว่างการสั่งซื้อสินค้าเช่นผ่านทางอีเวนต์ที่จัดส่ง

ดูเหมือนว่าไม่น่าเป็นไปได้ว่าช่องโหว่ดังกล่าวมีอยู่นอกกรอบและหากมีใครหวังว่า Magento จะทำงานได้ดีขึ้นในการเปิดเผยรายละเอียด / ความเสี่ยง ความเสี่ยงหนึ่งที่ผมจะได้เห็นก็คือว่าวีโอไอพีสุ่มสี่สุ่มห้าเก็บค่าคำขอระหว่างใส่รถเข็นในที่product_optionsคอลัมน์ของตารางรายการใบสั่งขาย (ดู: info_buyRequest) ในทางทฤษฎีคนสามารถหลอกลวงให้กลุ่มผู้ใช้เข้าสู่การเพิ่มรายการในรถเข็นของพวกเขาด้วยพารามิเตอร์การค้นหาที่แปลกและที่จะได้รับการเก็บไว้ในsales_flat_quote_item_optionตารางและในที่สุดsales_flat_order_itemตารางถ้าพวกเขายังสามารถที่จะได้รับผู้ใช้เหล่านั้นไปยังแปลง นี่เป็นเรื่องที่ไม่น่าเป็นไปได้สำหรับฉันในกรณีส่วนใหญ่

ประเด็นสำคัญของการเพิ่มลงในรถเข็น

หนึ่งในปัญหาใหญ่ที่ผู้คนพบเจอกับการใช้งาน FPC และโทเค็น CSRF คือพวกเขาได้รับแคช ไคลเอนต์แรกที่อุ่นแคชสร้างโทเค็นเมื่อไคลเอนต์ที่สองได้รับแคช HIT พวกเขาได้รับเพจที่มีโทเค็นแรกของผู้ใช้ เมื่อส่งแบบฟอร์มโทเค็นจะไม่ตรงกัน

Magento Enterprise ใช้ตัวยึดตำแหน่งเพื่อค้นหา / แทนที่คีย์แบบฟอร์มในหน้าแคช การใช้งานวานิชนั้นจะใช้ ESI ในทุกที่ที่มีการใช้คีย์ฟอร์ม

ฉันอยากรู้ว่าส่วนขยาย "ajax cart" ยอดนิยมบางส่วนนั้นจบลงด้วยการตรวจสอบโทเค็น CSRF ระหว่างการเพิ่มคำขอลงในรถเข็นหรือไม่

คำขอคุณลักษณะเดียวที่ฉันได้กล่าวถึงโทเค็น CSRF สำหรับการกระทำเพื่อเพิ่มในรถเข็นคือการอนุญาตให้สร้างลิงก์เพิ่มในรถเข็นเพื่อใช้ในอีเมลหรือเว็บไซต์อื่น ๆ (โซเชียลมีเดีย) บางครั้งฝ่ายการตลาดต้องการให้ผู้ใช้เพิ่มรายการลงในรถเข็นโดยตรงและเปลี่ยนเส้นทางไปยังรถเข็นหรือชำระเงินทันที ไม่สามารถทำได้อย่างง่ายดายถ้าต้องการโทเค็น CSRF ฉันจะแนะนำสิ่งนี้ก็ต่อเมื่อคุณพอใจกับระดับความเสี่ยงและเชื่อถือรหัสของคุณเองและบุคคลที่สาม


4

หลักการในการพัฒนาเว็บไซต์กล่าวว่ารูปแบบใด ๆ ของการปลอมแปลงคำขอข้ามไซต์ (CSRF) หรือการเขียนสคริปต์ข้ามไซต์ (XSS) เป็นสิ่งที่ไม่พึงประสงค์และควรหลีกเลี่ยงเสมอ

นั่นหมายความว่าอย่างไร? สำหรับ CSRF คุณไม่สามารถมี URL ใด ๆ ที่กลายพันธุ์เป็นข้อมูลรัฐภายในตัวเอง มิฉะนั้นผู้โจมตีสามารถจัดการเนื้อหาของรถเข็นของบุคคลหรือเพิ่ม / ลบรายการออกจากสิ่งที่อยากได้หรือการเปรียบเทียบของพวกเขาเพียงแค่หลอกให้พวกเขาคลิกหรือเยี่ยมชม URL นั้น (เปลี่ยนเส้นทางแม้)

ปุ่มแบบฟอร์มเป็นวิธีการที่พวกเขาได้รับรอบ Magento สร้างแฮชที่เฉพาะเซสชันและกำหนดให้ส่งพร้อมกับคำขอเปลี่ยนแปลงข้อมูลทุกครั้ง

การเพิ่ม / ลบรายการรถเข็นเป็นเวกเตอร์การโจมตีที่รุนแรง อาจไม่เหมาะสำหรับไซต์ส่วนใหญ่ แต่อย่างไรก็ตาม CSRF และ CSRF นั้นไม่ดี นั่นเป็นเหตุผลที่มีform_keyค่าตอนนี้ (ณ CE 1.8)

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