Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Format String Vulnerability และการป้องกันพร้อมตัวอย่างใน C


Format String - เป็นสตริง ASCII ที่ใช้สำหรับจัดรูปแบบสตริง เป็นสตริง ASCII ที่ประกอบด้วยข้อความและพารามิเตอร์การจัดรูปแบบ

สำหรับการจัดรูปแบบเอาต์พุตของโปรแกรม มี format strings ต่างๆ ในภาษา C

FORMAT STRING VULNERABILITIES (ช่องโหว่ Format String)

เป็นบั๊กที่เกิดจากข้อผิดพลาดในการเขียนโปรแกรมซึ่งโปรแกรมเมอร์อาจทำได้ง่าย หากบล็อกโค้ดที่มีข้อผิดพลาดแบบนี้ถูกส่งให้ฟังก์ชันเอาต์พุตอย่าง printf, sprintf ฯลฯ การเขียนจะถูกดำเนินการที่ที่อยู่หน่วยความจำสุ่ม

ตัวอย่าง

#include<stdio.h> #include<string.h> int main(){    char buffer[100];    strncpy(buffer, "Hii ", 5);    printf(buffer);    return 0; }

การป้องกัน (PREVENTIONS)

มีมาตรการบางอย่างที่สามารถใช้เพื่อป้องกัน Format String Vulnerabilities

  • พยายามใช้ format string เป็นส่วนหนึ่งของโปรแกรมแทนข้อมูลอินพุต สิ่งเหล่านี้สามารถแก้ไขได้ง่ายด้วย format string “%s”

  • ใช้ค่าคงที่สำหรับสร้าง format String และแยกสตริงตัวแปรทั้งหมดเป็นอาร์กิวเมนต์ของการเรียกฟังก์ชันแทนการใช้ในสตริงคงที่

  • สำหรับกรณีที่ไม่สามารถปฏิบัติตามมาตรฐานการเริ่มต้นค่าคงที่และตัวแปรได้ จะใช้ format guards