โปรแกรมส่วนใหญ่จะต้องโต้ตอบกับผู้ใช้โดยการป้อนข้อมูลบางอย่าง ไม่ว่าจะเป็นชื่อ ส่วนสูง น้ำหนักที่จะลงในฐานข้อมูล หรือ มิติทางเรขาคณิตวัตถุบางอย่างที่ต้องคำนวณบางอย่าง ผู้ใช้ป้อนข้อมูลทั้งหมดนี้ - บุคคลซึ่งหมายความว่าทุกสิ่งสามารถตอบสนองได้ โปรแกรมจะแสดงผลอะไรหากผู้ใช้เขียนด้วยคำพูดแทนอายุที่ต้องการ? เป็นไปได้มากว่าโปรแกรมจะขัดข้องหรือหยุดทำงาน แต่ไม่ใช่หากมี "การป้องกันคนโง่"
เหตุใดโปรแกรมจึงอาจหยุดทำงานหรือค้าง โปรแกรมจะพยายามแปลงชุดอักขระให้เป็นตัวเลขซึ่งจะเป็นไปไม่ได้ซึ่งหมายความว่า ทำงานต่อไปไม่ได้กำหนดแอปพลิเคชัน ดังนั้นการจัดโครงสร้างของโปรแกรมจึงมีความสำคัญมากเมื่อเข้าสู่ ไม่คาดคิดสำหรับโปรแกรมข้อมูล (ไม่ถูกต้องจากมุมมองของรูปแบบที่ต้องการ: จำเป็นต้องมีตัวเลข แต่ป้อนคำ) แอปพลิเคชันไม่ขัดข้อง แต่แจ้งให้ผู้ใช้ทราบว่าเกิดข้อผิดพลาดและขอให้ป้อนข้อมูลซ้ำ นี่คือ "หลักฐานที่โง่เขลา"
การใช้การป้องกันความผิดพลาดใน C
หากต้องการใช้การป้องกันความผิดพลาดที่ดีในการป้อนข้อมูลตัวเลข (int, double...) ต่างๆ ไม่จำเป็นต้องอ่านตัวเลข แต่ต้องอ่านสตริงอินพุตทั้งหมด จากนั้นจึงวิเคราะห์อินพุตเท่านั้น ภาษา C มีฟังก์ชันที่ดีมาก sscanf(const char *, const char *, args) ซึ่งทำงานคล้ายกับฟังก์ชัน scanf(const char *, args) โดยส่งคืนจำนวนอาร์กิวเมนต์ที่อ่านสำเร็จ เฉพาะข้อมูลเท่านั้นที่ไม่ถูกอ่าน จากสตรีมอินพุตมาตรฐาน แต่จากสตริงที่ส่งผ่านไปเป็นอาร์กิวเมนต์แรก
ลองดูตัวอย่างฟังก์ชันที่ใช้การตรวจสอบแบบหลอกโดยใช้ฟังก์ชัน sscanf
การป้อนจำนวนเต็มพร้อมตรวจสอบการป้อนข้อมูลที่ไม่ถูกต้อง
int get_integer(const char *msg) ( char answer; // บรรทัดเพื่ออ่าน int n; // พิมพ์จำนวนเต็มสุดท้าย ("%s", msg); // แสดงพรอมต์ fgets(คำตอบ, ขนาดของ (คำตอบ), stdin); // อ่านบรรทัด // จนกว่าจะอ่านจำนวนเต็มในขณะที่ (sscanf(answer, "%d", &n) != 1) ( printf("Incorrect input. Try again: "); // พิมพ์ข้อความเกี่ยวกับข้อผิดพลาด fgets (คำตอบ, sizeof(คำตอบ), stdin); // และอ่านบรรทัดอีกครั้ง ) return n; // คืนจำนวนเต็มที่ถูกต้อง )หากต้องการอ่านจำนวนเต็ม อัลกอริธึมจะอ่านสตริงทั้งหมด จากนั้นพยายามหาจำนวนเต็มจากสตริงนั้น หากล้มเหลว ฟังก์ชันจะแสดงข้อความแสดงข้อผิดพลาดเพื่อขอให้คุณป้อนข้อมูลซ้ำจนกว่าจะป้อนค่าจำนวนเต็มที่ถูกต้อง
การป้อนจำนวนจริงพร้อมตรวจสอบการป้อนข้อมูลที่ไม่ถูกต้อง
double get_double(const char *msg) ( คำตอบถ่าน; // บรรทัดเพื่ออ่าน double x; // พิมพ์จำนวนจริงสุดท้าย ("%s", msg); // แสดงพรอมต์ fgets(คำตอบ, ขนาดของ (คำตอบ), stdin) ; // อ่านบรรทัด // จนกว่าจะอ่านจำนวนจริงในขณะที่ (sscanf(answer, "%lf", &x) != 1) ( printf("Incorrect input. Try again: "); // พิมพ์ข้อความเกี่ยวกับ ข้อผิดพลาด fgets(answer, sizeof(answer), stdin); // และอ่านบรรทัดอีกครั้ง) return x; // ส่งคืนจำนวนจริงที่ถูกต้อง)การเข้าสู่จุดบนระนาบพิกัด (โครงสร้างที่มีสนามจริง 2 สนาม)
// คำอธิบายของโครงสร้างข้อมูล typedef struct point_t ( double x; // x พิกัด double y; // พิกัด y ) point_t; point_t get_point(const char *msg) ( char answer; // บรรทัดเพื่ออ่าน point_t point; // จุดสุดท้าย printf("%s", msg); // แสดงพรอมต์อินพุต fgets(answer, sizeof(answer), stdin ); // อ่านบรรทัด // จนกระทั่งทั้งสองพิกัดจุดถูกอ่านในขณะที่ (sscanf(answer, "(%lf,%lf)", &point.x, &point.y) != 2) ( printf("Incorrect input. ลองอีกครั้ง: "); // แสดงข้อความแสดงข้อผิดพลาด fgets(answer, sizeof(answer), stdin); // และอ่านบรรทัดอีกครั้ง ) จุดกลับ; // คืนจุดที่ถูกต้อง )ดังที่เห็นได้จากตัวอย่างคุณสมบัติของฟังก์ชัน sscanf ที่ส่งคืนจำนวนอาร์กิวเมนต์การอ่านช่วยให้คุณสามารถควบคุมความถูกต้องของข้อมูลที่ป้อนในรูปแบบที่ระบุและการอ่านทั้งบรรทัดจะป้องกันความจริงที่ว่าอักขระเว้นวรรคหรือการขึ้นบรรทัดใหม่ "\n" จะยังคงอยู่ในสตรีมอินพุต ซึ่งบ่อยครั้งทำให้คุณเสียเวลา การค้นหาข้อผิดพลาดจะใช้เวลาไม่ถึงชั่วโมงหรือหนึ่งวันด้วยซ้ำ
เป็นไปไม่ได้ที่จะปกป้องเซิร์ฟเวอร์จากการเข้าถึงจากภายนอกทันทีเนื่องจากมีการค้นพบช่องโหว่ใหม่ ๆ ทุกวันและวิธีการแฮ็กเซิร์ฟเวอร์ใหม่ ๆ ก็ปรากฏขึ้น เราจะพูดถึงการปกป้องเซิร์ฟเวอร์จากการเข้าถึงโดยไม่ได้รับอนุญาตในบทความนี้
เซิร์ฟเวอร์ของบริษัทใดก็ตามสามารถกลายเป็นเป้าหมายของการแฮ็กหรือการโจมตีของไวรัสได้ไม่ช้าก็เร็ว โดยทั่วไปแล้ว ผลลัพธ์ของการโจมตีดังกล่าวคือการสูญหายของข้อมูล ความเสียหายต่อชื่อเสียงหรือทางการเงิน ดังนั้นปัญหาด้านความปลอดภัยของเซิร์ฟเวอร์จึงควรให้ความสำคัญเป็นอันดับแรก
ควรเข้าใจว่าการป้องกันการแฮ็กเซิร์ฟเวอร์เป็นชุดของมาตรการ รวมถึงการตรวจสอบการทำงานของเซิร์ฟเวอร์อย่างต่อเนื่องและงานเพื่อปรับปรุงการป้องกัน เป็นไปไม่ได้ที่จะปกป้องเซิร์ฟเวอร์จากการเข้าถึงจากภายนอกทันทีเนื่องจากมีการค้นพบช่องโหว่ใหม่ ๆ ทุกวันและวิธีการแฮ็กเซิร์ฟเวอร์ใหม่ ๆ ก็ปรากฏขึ้น
เราจะพูดถึงการปกป้องเซิร์ฟเวอร์จากการเข้าถึงโดยไม่ได้รับอนุญาตในบทความนี้
วิธีและวิธีการปกป้องเซิร์ฟเวอร์จากการเข้าถึงโดยไม่ได้รับอนุญาต
การป้องกันทางกายภาพของเซิร์ฟเวอร์
การป้องกันทางกายภาพ ขอแนะนำว่าเซิร์ฟเวอร์ตั้งอยู่ในศูนย์ข้อมูลที่ปลอดภัย ห้องปิดและมีการป้องกัน บุคคลภายนอกไม่ควรสามารถเข้าถึงเซิร์ฟเวอร์ได้
ตั้งค่าการตรวจสอบสิทธิ์ SSH
เมื่อตั้งค่าการเข้าถึงเซิร์ฟเวอร์ ให้ใช้การรับรองความถูกต้องของคีย์ SSH แทนรหัสผ่าน เนื่องจากคีย์ดังกล่าวยากกว่ามากและบางครั้งก็เป็นไปไม่ได้เลยที่จะถอดรหัสโดยใช้กำลังดุร้าย
หากคุณคิดว่าคุณยังต้องใช้รหัสผ่าน อย่าลืมจำกัดจำนวนครั้งในการป้อนรหัสผ่าน
โปรดทราบว่าหากคุณเห็นข้อความเช่นนี้เมื่อคุณเข้าสู่ระบบ:
การเข้าสู่ระบบล้มเหลวครั้งล่าสุด: วันอังคารที่ 28 กันยายน 12:42:35 MSK 2017 จาก 52.15.194.10 บน ssh:notty
มีการพยายามเข้าสู่ระบบที่ล้มเหลว 8243 ครั้งนับตั้งแต่การเข้าสู่ระบบสำเร็จครั้งล่าสุด
อาจบ่งบอกว่ามีคนพยายามแฮ็กเซิร์ฟเวอร์ของคุณ ในกรณีนี้ ในการกำหนดค่าความปลอดภัยของเซิร์ฟเวอร์ ให้เปลี่ยนพอร์ต SSH จำกัดรายการ IP ที่เป็นไปได้ในการเข้าถึงเซิร์ฟเวอร์ หรือติดตั้งซอฟต์แวร์ที่จะบล็อกกิจกรรมที่น่าสงสัยและบ่อยเกินไปโดยอัตโนมัติ
ติดตั้งการอัปเดตล่าสุดเป็นประจำ
เพื่อให้มั่นใจถึงการปกป้องเซิร์ฟเวอร์ ให้ติดตั้งแพตช์และอัพเดตล่าสุดสำหรับซอฟต์แวร์เซิร์ฟเวอร์ที่คุณใช้ทันที - ระบบปฏิบัติการ, ไฮเปอร์ไวเซอร์, เซิร์ฟเวอร์ฐานข้อมูล
ขอแนะนำให้ตรวจสอบแพตช์ อัปเดต และรายงานข้อผิดพลาด/ช่องโหว่ใหม่ทุกวันเพื่อป้องกันการโจมตีที่ใช้ประโยชน์จากช่องโหว่แบบซีโรเดย์ ในการดำเนินการนี้ ให้สมัครรับข่าวสารจากบริษัทพัฒนาซอฟต์แวร์ ติดตามหน้าเพจบนโซเชียลเน็ตเวิร์ก
ปกป้องรหัสผ่านของคุณ
จนถึงขณะนี้ หนึ่งในวิธีทั่วไปในการเข้าถึงเซิร์ฟเวอร์คือการแฮ็กรหัสผ่านเซิร์ฟเวอร์ ดังนั้น ให้ปฏิบัติตามคำแนะนำที่เป็นที่รู้จักแต่ยังคงมีความเกี่ยวข้องเพื่อไม่ให้เซิร์ฟเวอร์ไม่ได้รับการป้องกัน:
- อย่าใช้รหัสผ่านที่เดาง่าย เช่น ชื่อบริษัทของคุณ
- หากคุณยังคงใช้รหัสผ่านเริ่มต้นสำหรับคอนโซลผู้ดูแลระบบ ให้เปลี่ยนทันที
- รหัสผ่านสำหรับบริการที่แตกต่างกันจะต้องแตกต่างกัน
- หากคุณต้องการให้รหัสผ่านแก่ใครบางคน อย่าส่งที่อยู่ IP การเข้าสู่ระบบและรหัสผ่านในอีเมลหรือข้อความ Messenger เดียวกัน
- คุณสามารถตั้งค่าการตรวจสอบสิทธิ์แบบสองปัจจัยเพื่อเข้าสู่ระบบบัญชีผู้ดูแลระบบของคุณได้
ไฟร์วอลล์
- ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์มี ซึ่งได้รับการกำหนดค่าและทำงานอยู่ตลอดเวลา
- รักษาความปลอดภัยการรับส่งข้อมูลทั้งขาเข้าและขาออก
- ติดตามพอร์ตที่เปิดอยู่ และอย่าเปิดสิ่งที่ไม่จำเป็นเพื่อวัตถุประสงค์อะไร เพื่อลดจำนวนช่องโหว่ที่อาจเกิดขึ้นจากการแฮ็กเซิร์ฟเวอร์
โดยเฉพาะอย่างยิ่งไฟร์วอลล์มีประโยชน์อย่างมากในการปกป้องเซิร์ฟเวอร์ การโจมตีแบบดีดอส, เพราะ คุณสามารถสร้างกฎไฟร์วอลล์ที่ห้ามได้อย่างรวดเร็วและเพิ่มที่อยู่ IP ที่เป็นแหล่งที่มาของการโจมตี หรือบล็อกการเข้าถึงแอปพลิเคชันบางตัวโดยใช้โปรโตคอลบางตัว
การตรวจสอบและการตรวจจับการบุกรุก
- จำกัดซอฟต์แวร์และบริการที่ทำงานบนเซิร์ฟเวอร์ของคุณ ตรวจสอบทุกสิ่งที่คุณกำลังทำงานอยู่เป็นระยะ และหากคุณพบกระบวนการใด ๆ ที่ไม่คุ้นเคย ให้ลบออกทันทีและเริ่มสแกนหาไวรัส
- ตรวจสอบสัญญาณของการปลอมแปลงเป็นระยะๆ ข้อมูลใหม่อาจบ่งบอกถึงการแฮ็ก บัญชีผู้ใช้ที่คุณไม่ได้สร้าง ย้าย หรือลบไฟล์ /etc/syslog.conf, ไฟล์ที่ถูกลบ/etc/shadowและ /etc/passwrd.
- ตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์ของคุณ ดูความเร็วปกติและ ปริมาณงานเพื่อให้คุณสามารถสังเกตเห็นความเบี่ยงเบนได้ เช่น เมื่อโหลดบนเซิร์ฟเวอร์สูงกว่าปกติอย่างมาก
ใช้การเข้ารหัส VPN และ SSL/TLS
ในกรณีที่จำเป็น การเข้าถึงระยะไกลไปยังเซิร์ฟเวอร์ ควรอนุญาตจากที่อยู่ IP บางแห่งเท่านั้นและเกิดขึ้นผ่าน VPN
ขั้นตอนต่อไปในการรับรองความปลอดภัยอาจเป็นการตั้งค่า SSL ซึ่งจะช่วยให้คุณไม่เพียงแต่เข้ารหัสข้อมูลเท่านั้น แต่ยังสามารถตรวจสอบตัวตนของผู้เข้าร่วมรายอื่นในโครงสร้างพื้นฐานเครือข่ายโดยออกใบรับรองที่เหมาะสมให้พวกเขาอีกด้วย
การตรวจสอบความปลอดภัยของเซิร์ฟเวอร์
เป็นความคิดที่ดีที่จะตรวจสอบความปลอดภัยของเซิร์ฟเวอร์อย่างอิสระโดยใช้วิธีเพนเทสต์ เช่น การสร้างแบบจำลองการโจมตีเพื่อค้นหาช่องโหว่ที่อาจเกิดขึ้นและกำจัดช่องโหว่เหล่านั้นอย่างทันท่วงที ขอแนะนำให้เกี่ยวข้องกับผู้เชี่ยวชาญในเรื่องนี้ ความปลอดภัยของข้อมูลอย่างไรก็ตาม การทดสอบบางอย่างสามารถทำได้โดยอิสระโดยใช้โปรแกรมสำหรับแฮ็กเซิร์ฟเวอร์
มีอะไรอีกที่คุกคามเซิร์ฟเวอร์นอกเหนือจากการแฮ็ก?
เซิร์ฟเวอร์อาจล้มเหลวได้จากหลายสาเหตุนอกเหนือจากการแฮ็ก ตัวอย่างเช่น นี่อาจเป็นการติดมัลแวร์หรือเป็นเพียงความเสียหายทางกายภาพขององค์ประกอบอย่างใดอย่างหนึ่ง
ดังนั้นมาตรการในการปกป้องเซิร์ฟเวอร์จึงควรรวมถึง:
- การติดตั้งและอัพเดตโปรแกรมเพื่อปกป้องเซิร์ฟเวอร์ - โปรแกรมป้องกันไวรัส
- สำเนาข้อมูลที่เข้ารหัสเป็นประจำอย่างน้อยสัปดาห์ละครั้ง เนื่องจากตามสถิติแล้ว ฮาร์ดไดรฟ์ของเซิร์ฟเวอร์อยู่ในอันดับแรกในด้านความถี่ของความล้มเหลว ทำให้เเน่นอน สำเนาสำรองเก็บไว้ในสภาพแวดล้อมที่ปลอดภัยทางกายภาพ
- รับประกันการจ่ายไฟไปยังห้องเซิร์ฟเวอร์อย่างต่อเนื่อง
- การป้องกันทางกายภาพของเซิร์ฟเวอร์อย่างทันท่วงที รวมถึงการทำความสะอาดเซิร์ฟเวอร์จากฝุ่นและการเปลี่ยนแผ่นระบายความร้อน
ประสบการณ์ของผู้เชี่ยวชาญ Integrus บอกเราเช่นนั้น การป้องกันที่ดีที่สุดต่อต้านภัยคุกคามประเภทนี้ - นี่คือการใช้งาน ปฏิบัติที่ดีที่สุดในด้านระบบป้องกันเซิร์ฟเวอร์
เพื่อให้มั่นใจในความปลอดภัยของเซิร์ฟเวอร์ของลูกค้า เราใช้เครื่องมือหลายอย่างร่วมกัน: ไฟร์วอลล์ โปรแกรมป้องกันไวรัส เทคโนโลยีความปลอดภัย / การจัดการเหตุการณ์ (SIM / SEM) เทคโนโลยีการตรวจจับ / ป้องกันการบุกรุก (IDS / IPS) เทคโนโลยีการวิเคราะห์พฤติกรรมเครือข่าย (NBA) และแน่นอนว่าเซิร์ฟเวอร์บำรุงรักษาเชิงป้องกันเป็นประจำและการจัดห้องเซิร์ฟเวอร์ที่ปลอดภัยแบบครบวงจร สิ่งนี้ช่วยให้คุณลดความเสี่ยงของการแฮ็กหรือความล้มเหลวของเซิร์ฟเวอร์ด้วยเหตุผลอื่นให้เหลือน้อยที่สุด
เราพร้อมที่จะดำเนินการตรวจสอบความปลอดภัยของเซิร์ฟเวอร์ของบริษัทคุณ ปรึกษาผู้เชี่ยวชาญ และดำเนินการงานทุกประเภทเพื่อตั้งค่าการป้องกันอุปกรณ์เซิร์ฟเวอร์