บัฟเฟอร์มากเกินไปนั้นใหญ่เกินไป ไม่มีสิ่งใดใน C ที่ตรวจสอบช่วงโดยค่าเริ่มต้นดังนั้นจึงเป็นเรื่องง่ายมากที่จะเขียนทับบัฟเฟอร์ มีฟังก์ชั่นไลบรารีมาตรฐานgets()ที่ไม่สามารถหยุดการโอเวอร์โฟลว์บัฟเฟอร์และไม่ควรใช้
มีเทคนิคระดับการนำไปปฏิบัติบางอย่างเพื่อขัดขวางการใช้ประโยชน์เช่น scrambling heap blocks แต่จะไม่หยุดบัฟเฟอร์ล้นในบัฟเฟอร์ในเครื่องซึ่งมักจะทำสิ่งที่น่าสนใจเช่นเปลี่ยนที่อยู่ที่ฟังก์ชันจะกลับไป
ไม่มีวิธีแก้ปัญหาทั่วไปที่ดีใน C. ฟังก์ชั่นห้องสมุดหลายแห่งมีรุ่นที่จะ จำกัด จำนวนเงินที่พวกเขาจะเขียน แม้ว่าการคำนวณที่สามารถเงอะงะ มีซอฟต์แวร์ที่สามารถตรวจจับฮีปบัฟเฟอร์ล้นในการทดสอบตราบใดที่มีการทดสอบที่เหมาะสมและสแต็กโอเวอร์โฟลว์มักจะปรากฏเป็นความผิดพลาดในการทดสอบ นอกเหนือจากนั้นมันเป็นเรื่องของการเข้ารหัสและการตรวจสอบรหัสอย่างระมัดระวัง
ปัญหาที่เกี่ยวข้องคือปัญหาของการเขียนลงในบัฟเฟอร์เล็กเกินไปโดยตัวละครตัวหนึ่งลืมว่าสตริง C ที่มีความยาว n ตัวต้องใช้ตัวอักษร n + 1 ในหน่วยความจำเนื่องจากตัว'\0'ยุติ หากผู้โจมตีสามารถจัดการเก็บสตริงโดยไม่ต้องใช้เทอร์มินัลฟังก์ชัน C ใด ๆ ที่คาดว่าสตริงจะดำเนินการต่อไปจนกว่าจะถึงศูนย์ไบต์ซึ่งอาจส่งผลให้คัดลอกหรือส่งออกข้อมูลมากกว่าที่ต้องการ (หรือกดปุ่มหน่วยความจำ ) การแก้ปัญหาอีกครั้งคือการรับรู้การดูแลและการตรวจสอบรหัส
มีความเสี่ยงอีกอย่างกับprintf()ครอบครัว หากคุณเคยเขียนchar * str; ... printf(str);คุณกำลังตั้งค่าตัวเองสำหรับปัญหาหากstrมี '%' เมื่อพิมพ์ %nสั่งรูปแบบช่วยให้printf()การเขียนในหน่วยความจำ การแก้ปัญหาคือหรือprintf("%s", str); puts(str);(นอกจากนี้ให้ใช้ C99 snprintf()แทนsprintf())
การใช้จำนวนเต็มที่ไม่ได้ลงนามโดยเฉพาะดัชนีลูปอาจทำให้เกิดปัญหาได้ หากคุณกำหนดค่าลบเล็กน้อยให้แก่ผู้ที่ไม่ได้ลงชื่อคุณจะได้รับค่าบวกจำนวนมาก ที่สามารถทำลายสิ่งที่ต้องการการประมวลผลเพียง N กรณีของบางสิ่งบางอย่างหรือในฟังก์ชั่น จำกัด strncpy()เช่น ตรวจสอบจำนวนเต็มที่ไม่ได้ลงนามทั้งหมด คุณอาจต้องการที่จะหลีกเลี่ยงเนื่องจากค่าขนาดใหญ่หนึ่งในผู้ที่จะแปลงเป็นค่าบวกขนาดใหญ่ในunsigned shortint
intอย่าลืมว่าค่าคงที่ตัวละครในซีเป็นจริง เขียนสิ่งที่ต้องการchar c; while((c = getchar()) != EOF) ...ได้อย่างง่ายดายสามารถล้มเหลวเนื่องจากจะไม่สามารถแทนได้ในEOFchar
มีข้อผิดพลาดลักษณะ C มากกว่าที่ฉันคิดได้ แต่สิ่งเหล่านี้อาจทำให้เกิดปัญหาด้านความปลอดภัย