ป้องกันการโจมตี CSRF ในรูปแบบเว็บ ASP.NET โดยไม่ต้องใช้มาสเตอร์เพจ

ฉันกำลังตรวจสอบความปลอดภัยของเว็บไซต์ ASP.NET ที่มีอายุประมาณ 7 ปี ในขณะที่ไซต์ถูกสร้างขึ้น คำแนะนำของ Microsoft คือการเพิ่มสิ่งต่อไปนี้ลงในเพจฐานทั่วไป (สืบทอดมาจากโค้ดทั้งหมดที่อยู่เบื้องหลังเพจ):

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
    MyBase.OnInit(e)

    If Request.IsSecureConnection = True Then
        ViewStateUserKey = Session.SessionID
    End If
End Sub

คำแนะนำนี้มาจากบทความ MSDN ต่อไปนี้จาก 2548.

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

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


person Josh    schedule 26.06.2016    source แหล่งที่มา
comment
ฟังก์ชั่นข้างต้นป้องกัน CSRF ได้อย่างไร   -  person Legends    schedule 27.06.2016


คำตอบ (1)


ใช่ สิ่งนี้จะบรรเทา CSRF หากเปิดใช้งาน ViewStateMac

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

เนื่องจาก ViewState ถูกโพสต์กลับไปยังเซิร์ฟเวอร์ทุกครั้งที่มีการร้องขอที่มีผลข้างเคียง ASP.NET จะตรวจสอบว่าค่า ViewState นั้นมาจากผู้ใช้ปัจจุบันจริง ๆ

ดังนั้นผู้โจมตีจึงไม่สามารถสร้างคำขอ POST เพื่อล่อลวงเหยื่อให้ส่งได้เนื่องจากพวกเขาไม่มี ID เซสชันของเหยื่อในการดำเนินการนี้

โปรดทราบว่าข้างต้นถือว่าคำขอทั้งหมดที่มีผลข้างเคียงจะดำเนินการผ่าน postbacks นั่นคือแอปพลิเคชันเป็นไปตาม RFC 7231 ในส่วนที่เกี่ยวกับคำจำกัดความของ "ปลอดภัย" วิธีการ และไม่มีตัวจัดการอื่นสำหรับคำขอ POST นอกเหนือจากกลไก postback

โปรดทราบว่าคำขอ AJAX แบบกำหนดเองใดๆ ในแอปพลิเคชัน เช่น คำขอที่สร้างโดย JQuery จะไม่ได้รับการปกป้องจาก CSRF เนื่องจากคำขอเหล่านี้ไม่ได้นำไปใช้เป็นแบบ postback

แนะนำให้ตั้งค่าและตรวจสอบส่วนหัวที่กำหนดเองสำหรับสิ่งเหล่านี้ เช่น X-Requested-With โปรดทราบว่าเนื่องจากช่องโหว่ Flash ต่างๆ คุณอาจต้องการส่งโทเค็นไปที่ส่วนหัวเพื่อตรวจสอบฝั่งเซิร์ฟเวอร์ด้วย

person SilverlightFox    schedule 27.06.2016