ฉันจะป้องกันไม่ให้ผู้ใช้ระดับสูงเรียกฟังก์ชัน ajax ของฉันได้อย่างไร


12

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

หรือฉันแค่ต้องตรวจสอบเงื่อนไขขอบเขตใน php script และป้องกันผู้ใช้จากการปลอมแปลงสิ่งที่พวกเขาไม่ได้รับอนุญาตให้ทำ แต่อนุญาตให้พวกเขาหลอกที่พวกเขาจะได้รับอนุญาต


ajax call ไม่มีการตรวจสอบสิทธิ์อย่างสมบูรณ์หรือไม่? คุณสร้างเซสชันสำหรับแต่ละรายการหรือไม่ มีรูปแบบการละเมิดไหม? และการจัดการที่เฉพาะเจาะจงของปัญหาหรือมากกว่าจำนวนของโหลดที่เพิ่มไปยังไซต์คืออะไร?
artlung

คุณช่วยโพสต์รายละเอียดเพิ่มเติมได้ไหม? การโทร AJAX กำลังทำอะไร พวกเขากำลังจัดการอะไร? เกิดปัญหาอะไรขึ้นถ้าสคริปต์ถูกเรียกใช้ภายนอก AJAX
DisgruntledGoat

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

คำตอบ:


12

ฉันไม่คิดว่าจะมีวิธีใดที่จะทำสิ่งนี้ได้อย่างน่าเชื่อถือเนื่องจากข้อมูลใด ๆ ที่คุณอาจส่งอาจถูกปลอมแปลงขึ้นอยู่กับความฉลาดของผู้ใช้

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


2
+1 .. เหมือนว่ามันเป็นไปไม่ได้ที่จะป้องกันไม่ให้ผู้คนบันทึกสำเนาของสิ่งที่เบราว์เซอร์แสดง การประกวดมากกว่านี้เพื่อดูว่าคุณสามารถทำให้พวกเขายอมแพ้และไปยังสิ่งอื่นก่อนที่พวกเขาจะคิดออก
Tim Post

6

ในระยะสั้นไม่มี การร้องขอใด ๆ ที่ส่งไปยัง URL ผ่าน GET หรือ POST สามารถทำได้โดยทุกคนที่ใช้ซอฟต์แวร์ใด ๆ ที่จริงแล้วคำขอ AJAX นั้นไม่แตกต่างจากการโหลด URL โดยตรงยกเว้นในกรณีหลังข้อมูลที่ส่งคืนจะแสดงในเบราว์เซอร์เช่นหน้าเว็บ

นี่คือเหตุผลที่คุณควรตรวจสอบความถูกต้องของข้อมูลที่ส่งบนเซิร์ฟเวอร์เสมอไม่ว่าคุณจะทำการตรวจสอบ Javascript ก็ตาม

ยังไม่ชัดเจนว่าสคริปต์ฝั่งเซิร์ฟเวอร์ทำอะไรและอาจผิดพลาด แต่ถ้าผู้ใช้สามารถ "จัดการไซต์" โดยการเรียกสคริปต์ของคุณด้วยข้อมูลที่ไม่ถูกต้องคุณกำลังทำผิด

อาจเป็นทางออกที่ดีที่สุดที่จะแนะนำรูปแบบการตรวจสอบ


3

ดังนั้นโดยทั่วไปคุณต้องการ จำกัด ajax.php ให้ตอบกลับคำขอ AJAX เท่านั้น?

ฉันไม่ผู้เชี่ยวชาญ PHP, แต่ดูเหมือนว่ามันเป็นไปได้เพื่อตรวจสอบว่ามีการร้องขอให้มาจาก AJAX หรือ "ปกติ" $_SERVER['HTTP_X_REQUESTED_WITH']คำขอเบราว์เซอร์โดยการตรวจสอบค่าของ

แหล่ง


2
จุดที่ดีสมมติว่าผู้ใช้ไม่ได้ใช้อาแจ็กซ์หรือปลอมแปลงส่วนหัว HTTP นั้น
Adam

1

ในขณะที่คนอื่นชี้ให้เห็น ... การโทร ajax เป็นเพียงผู้รับ $ _GET หรือ $ _POST ดังนั้นแนวทางของฉันมักจะปฏิบัติต่อพวกเขาเสมอเหมือนกับที่ฉันทำหน้าการกระทำและกรอง / ฆ่าเชื้ออินพุต หากคุณมีสิ่งที่คุณคาดหวังเช่นเดือนหนึ่งและคุณรู้ว่ามันอยู่ในรูปแบบ "Jan, Feb, Mar ... " คุณสามารถตั้งค่าของค่าและตัวกรองที่คาดหวังได้ กับทุกอย่างที่ไม่ตรงกับดักและเลือกทิ้งอะไรอย่าง "Bzzt ... ขอบคุณที่เล่น ... "

ฉันไม่สามารถนึกถึงตัวอย่างที่สคริปต์ Ajax ของฉันจะต้องปลอดภัยกว่าการส่งแบบฟอร์ม

HTH


+1 สำหรับ "Bzzt" ซึ่งกลายเป็นเรื่องสนุกกว่าในบริบทของ "Bzzt - ขอบคุณที่เล่น!" ตามด้วยจางหายไปช้าๆเป็นสีดำพร้อมกับการห้ามสามชั่วโมงที่บังคับใช้โดยชุดคุกกี้บนเครื่องของผู้ใช้ (ฉันแน่ใจว่าพวกเขาต้องการรับข้อความ)
danlefree

0

ฉันคิดว่าโซลูชันที่สำคัญของคุณจะจำกัด อัตราการรับส่งข้อมูลจากลายนิ้วมือผู้ใช้ที่เฉพาะเจาะจง อาจมีแฮชที่อยู่ IP สตริงตัวแทนผู้ใช้และข้อมูลที่ส่ง

นอกจากนี้การเชื่อมโยงเพจที่เรียก ajax ไปยัง ajax ที่ส่งคืนข้อมูลใกล้ ๆ สามารถช่วยได้ ดังนั้นในหน้าดังกล่าวที่หน้าโหลดส่งคีย์เซสชันที่ดีสำหรับXเซสชันสำหรับอาแจ็กซ์แต่ละคำขอ JavaScript ของคุณจะต้องผ่านคีย์นั้นกลับมิฉะนั้นอาแจ็กซ์จะกลับมาล้มเหลว เมื่อหน้าเว็บของคุณมีการX+1โทร ajax ให้บังคับให้ผู้ใช้ดำเนินการบางอย่าง (อาจเป็น captcha หรืออาจเป็นบางสิ่งที่คล้ายกับmousemoveหรือtapเหตุการณ์ขึ้นอยู่กับ UA) ก่อนที่จะส่งกุญแจเซสชั่นใหม่ลงไป กระบวนการ.

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

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