ฉันจะป้องกัน (หรืออย่างน้อยพร้อมท์เพื่อยืนยัน) จำนวนมากอย่างไร้เหตุผลจากการใช้คำสั่งคำนำหน้าได้อย่างไร


9

มันไม่ได้เกิดขึ้นบ่อยเท่าที่คุณคิด แต่มันเกิดขึ้นเป็นครั้งคราวและฉันก็ไม่ได้เป็นเจ้าของแมว

โดยทั่วไปถ้าคุณบดแถวหมายเลขหรือ numpad จากนั้นกด keycombo ที่เรียกคำสั่งที่ทำซ้ำได้คุณสามารถสั่ง Vim โดยไม่ตั้งใจเพื่อทำงานหลายพันล้านหรือแม้กระทั่งพันล้านครั้ง สิ่งนี้จะควบคุมไม่ได้ง่ายและอาจทำให้ข้อมูลสูญหายได้

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


4
เพียงเพื่อให้แน่ใจว่าฉันเข้าใจคำถามของคุณ: คุณพิมพ์เป็นลำดับโดยไม่ได้ตั้งใจเช่น144477@@หรือ99999.คุณต้องการหยุดการประหารชีวิตเมื่อจำนวนที่มากเกินไป? ฉันถูกไหม? (ฉันต้องถามเพราะมันดูแปลก ๆ สำหรับฉันฉันไม่เคยมีปัญหานี้เลย)
statox

3
ทำไม…ไม่ใส่ใจกับสิ่งที่คุณทำ
romainl

3
@ statox ใช่ถูกต้อง romainl ก็มีประเด็นที่ถูกต้องเช่นกัน แต่ดูเหมือนว่าไม่เกี่ยวข้องกับคำถาม คำถามยังคงอยู่และอาจไม่เป็น "ร้ายแรง" เหมือนคำถามอื่น ๆ แต่คำถามนั้นยังคงอยู่ ฉันคิดว่ามันสมเหตุสมผลที่จะสามารถระบุขอบเขตบนของสิ่งนี้เพื่อป้องกันการปฏิเสธการบริการโดยไม่ตั้งใจ สำหรับข้อเสนอแนะเกี่ยวกับการไม่ยกระดับใช่ว่าสามารถเกี่ยวข้องได้หากการโอเวอร์โฟลว์นี้เลิกทำการบัฟเฟอร์เช่นกันฉันไม่ได้พิจารณาด้วยเช่นกัน (ตัวอย่างที่ไม่ได้วางแผนไว้ - ฉันมีแป้นพิมพ์ 60% แถวบนสุดคือตัวเลขฉันหยิบมันขึ้นมาด้วยมือลืมถอดออก ฯลฯ )
Steven Lu

4
คุณสามารถใช้set showcmdเพื่อแสดงปุ่มที่คุณพิมพ์ที่มุมล่างขวา
Martin Tournoij

1
@Carpetsmoker ฉันคิดว่ามันจะมีคุณสมบัติเป็น "แจ้งให้ยืนยัน" เพราะมันแสดงบนหน้าจอ ฉันขอแนะนำให้เพิ่มเป็นคำตอบ (อาจรวมถึงวิธีเพิ่มเป็นตัวเลือกเริ่มต้น.vimrcเพื่อให้คำตอบมีอยู่ในตัวเองอย่างสมบูรณ์)
Wildcard

คำตอบ:


2

ฉันพบว่าคุณมักจะสามารถขัดจังหวะกระบวนการทำซ้ำโดยการส่ง SIGINT ( Ctrl+C) ตราบใดที่ vimscript บางตัวไม่ใช้ลูปภายในที่ยาวมาก ๆ ก็ไม่ต้องกังวลเรื่อง DoS

ดูที่นี่สำหรับตัวอย่างของปลั๊กอินอาจมีฟังก์ชั่นที่ลูปขึ้นอยู่กับจำนวนที่ป้อน

สำหรับจุดประสงค์และจุดประสงค์เกือบทั้งหมดปัญหานี้ตรงนี้เป็นข้อสมมุติ


4
"ปัญหานี้เป็นข้อสมมุติ" ... ไม่มันไม่ใช่ ฉันต้องทำงานกับ SSH บนโทรศัพท์ของฉันผ่านการเชื่อมต่อ 2G ซึ่งฉันพลาดการกดแป้นพิมพ์โดยไม่ได้ตั้งใจหรือกดแป้นหลายครั้งในขณะที่พิมพ์ล่วงหน้าคาดว่าจะเกิดสถานการณ์คล้ายกันมาก (อาจไม่ใช่ 99999 แต่ตัวเลขน้อยลงใช่)
muru

เจ๋งใช่แล้วเทอร์มินัลอีมูเลเตอร์ช้า (ขึ้นอยู่กับจำนวนการเปลี่ยนแปลงที่ใช้เป็นกลุ่ม) สามารถทำให้ปัญหารุนแรงขึ้นได้โดยการเพิ่มความล่าช้าในการประมวลผลทางฝั่งไคลเอ็นต์ ต้องไปที่ Ctrl + C อย่างรวดเร็ว!
Steven Lu

1
คุณก็สามารถใช้คุณไม่จำเป็นต้องใช้<Esc> <C-c>ความแตกต่างคือการ<C-c>ยกเลิกสิ่งที่ Vim กำลังทำอยู่ (เช่นการเรียกใช้ฟังก์ชัน) และ<Esc>ไม่ทำเช่นนั้น คุณแทบจะไม่ต้องการใช้<C-c>เว้นแต่คุณจะต้องการ "ฆ่า" บางสิ่งบางอย่าง
Martin Tournoij
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.