Monday, June 25, 2018

Knowledge : โจมตีแบบ Cross-site Request Forgery หรือ CSRF

ผลการค้นหารูปภาพสำหรับ csrf

Credit pic : https://d3eaqdewfg2crq.cloudfront.net/wp-content/uploads/2013/04/csrf.png 

CSRF หรือ  Cross-site Request Forgery  คืออะไร

      การโจมตีแบบ CSRF จะใช้ “ตัวตน (Identity)” และ “สิทธิ์ (Privilege)” ของเหยื่อที่มีบนเว็บไซต์ ในการปลอมตัวเป็นเหยื่อและกระทำการหรือธุรกรรมไม่พึงประสงค์ แฮ็คเกอร์จะพยายามใช้ประโยชน์จากเหยื่อที่มี Login Cookies เก็บไว้ในเว็บเบราเซอร์ ส่งผลให้เว็บไซต์ E-commerce ที่ส่ง Cookie ไปเก็บข้อมูลการพิสูจน์ตัวตนของผู้ใช้มักตกเป็นเป้าหมายของการโจมตีนี้


ตัวอย่างการโจมตีแบบ CSRF 

      ที่เห็นชัดๆคือ ขณะที่เหยื่อล็อกอินเข้าใช้เว็บไซต์ของธนาคารแล้ว และเซสชันยังคงค้างอยู่ เหยื่อเผลอกดลิงค์บางอย่างจากแฮ็คเกอร์ที่อาจแฝงมากับอีเมล Phishing หรือสคริปต์บนเว็บไซต์ต่างๆ ส่งผลให้เหยื่อกระทำธุรกรรมตามที่แฮ็คเกอร์ต้องการ เช่น โอนเงินจากบัญชีของตนไปให้แฮ็คเกอร์ โดยที่เหยื่อไม่รู้ตัว และเว็บไซต์ของธนาคารก็นึกว่าเป็นการทำธุรกรรมปกติที่มาจากตัวเหยื่อเอง
การโจมตีแบบนี้ตรวจจับได้ยากเนื่องจากเป็นการกระทำธุรกรรมปกติในนามของเหยื่อเอง ทั้งข้อมูลการพิสูจน์ตัวตนและ IP ต่างถูกนำมาใช้เพื่อยืนยันว่าเป็นเจ้าของบัญชีทำธุรกรรมจริง ส่งผลให้ทางธนาคารต้องใช้เวลานานในการเก็บข้อมูลและสืบสวน ก่อนที่จะดำเนินเรื่องย้อนหลังการทำธุรกรรม หรือทำให้ธุรกรรมเป็นโมฆะไป

Screen Shot 2559-01-21 at 11.15.28 AM
 Credit pic : https://i1.wp.com/blog.wisered.com/wp-content/uploads/2016/01/Screen-Shot-2559-01-21-at-11.15.28-AM.png?w=1742&ssl=1


ป้องกันการโจมตีแบบ CSRF ได้อย่างไร

 

      เว็บไซต์ Network World ได้แนะนำวิธีป้องกันการโจมตีแบบ CSRF ของทั้งฝั่งเซิร์ฟเวอร์และฝั่งผู้ใช้งาน ดังนี้
ฝั่งเซิร์ฟเวอร์
  • เว็บไซต์ของธนาคารและผู้ประกอบการควรเปลี่ยนจากการใช้ Cookies ที่ทำ Session-tracking มาเป็น Session Token ที่ถูกสร้างขึ้นแบบไดนามิกแทน ซึ่งช่วยให้แฮ็คเกอร์ขโมยเซสชันจากผู้ใช้ได้ยากยิ่งขึ้น
  • อย่าเชื่อว่าทุกเว็บไซต์จะมีมาตรการในการป้องกัน CSRF แนะนำให้ทำการป้องกันที่ฝั่งผู้ใช้ด้วยเช่นกัน
ฝั่งผู้ใช้
  • ติดตั้งโปรแกรม Antivirus และอัปเดตฐานข้อมูลล่าสุดอยู่เสมอ สคริปต์อันตรายบางอย่างอาจถูกบล็อกโดยโปรแกรมเหล่านี้ได้
  • อย่าเปิดอีเมลหรือใช้งานเว็บไซต์อื่นๆ ขณะที่ล็อกอินเข้าเว็บไซต์ของธนาคารหรือ E-commerce เพื่อทำธุรกรรมออนไลน์ เพื่อลดความเสี่ยงในการคลิกลิงค์ซึ่งอาจเป็นสคริปต์สำหรับโจมตีแบบ CSRF ได้
  • หลังจากที่ทำธุรกรรมออนไลน์เสร็จสิ้นให้ล็อกเอาท์ออกจากเว็บไซต์ทันที เพื่อไม่ให้มีเซสชันค้างให้แฮ็คเกอร์มาขโมยใช้งานได้
  • ไม่บันทึกชื่อล็อกอินและรหัสผ่านของเว็บไซต์ธนาคารและสถานบันการเงินไว้บนเว็บเบราเซอร์ สคริปต์ CSRF อาจเจาะถึงข้อมูลตรงจุดนี้และนำไปใช้ประโยชน์ได้
  • ยกเลิกการใช้สคริปต์บนเว็บเบราเซอร์ เพื่อเพิ่มความมั่นคงปลอดภัยสูงสุด
  • แยกการทำธุรกรรมออนไลน์ไว้บนเบราเซอร์หนึ่ง ส่วนเว็บไซต์ที่เหลือไว้บนอีกเบราเซอร์หนึ่ง เพื่อไม่ให้แฮ็คเกอร์ใช้ประโยชน์จากเว็บเบราเซอร์เดียวกันในการโจมตีเว็บไซต์ที่กำลังทำธุรกรรม

ขอขอบคุณข้อมูลจาก
  1.  https://www.techtalkthai.com/how-to-prevent-csrf/
  2.  https://blog.wisered.com/%E0%B8%8A%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B9%82%E0%B8%AB%E0%B8%A7%E0%B9%88%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%A0%E0%B8%97-cross-site-script-forgery-csrf/
  3.  http://www.cs.utexas.edu/~shmat/courses/cs378_spring09/zeller.pdf


Saturday, June 2, 2018

Mini Project My WordBucket Django

เป็นบทความที่จะแสดง Commit หรือ ความคืบหน้าของ mini Project โดยจะใช้ Django

Commit รวมทั้งหมด ที่ทำงานไป โดยจะแสดงเฉพาะ Commit ของผู้ทำบล็อคเท่านั้น โดย commit บางส่วนเป็นของผู้ร่วมทำงานจึงไม่ได้นำมาแสดง

และเนื่องจากเป็นการใช้ Git และเนื่องจากเป็นการใช้ Git เป็นครั้งแรกนั้นจะทำให้การ commit บางครั้งไม่ถูกต้อง จึงขออภัยมา ณ ที่นี้ด้วยครับ




  • First use github
เป็นการเริ่มต้นเอางานขึ้นสู่ Git 



  • Create login
ทำการเพิ่มในส่วยของการ Login และ Sign up ลงไปในงานของเรา



  • Functional test login but unit test error
ทำการเขียน Test เพื่อทดสองว่า Login และ Sign up ที่เราทำนั้นทำงานได้ถูกต้องหรือไม่โดยจะใช้ Function Test และ Unit Test ซึ่งเราจะสามารถ Test ได้เพียง Function Test 



  • Try to test unit
เราได้พยายามที่จะทำ Unit Test เพื่อ Test ส่วนของ Login อีกครั้ง ซึ่งก็ไม่สามารถทำได้ 



  • Add function to wordbucket
ได้เพิ่มการ Test ลงไปใน Functional test เพิ่ม Test งานของเรา


Mini Project WordBucket NodeJs

       เป็นบทความที่จะแสดง Commit หรือ ความคืบหน้าของ mini Project โดยจะใช้ NodeJS

Commit รวมทั้งหมด ที่ทำงานไป โดยจะแสดงเฉพาะ Commit ของผู้ทำบล็อคเท่านั้น โดย commit บางส่วนเป็นของผู้ร่วมทำงานจึงไม่ได้นำมาแสดง



  • First commit
เป็นการเริ่มต้นเอางานขึ้นสู่ Git 



  • refector code select function
หลังจากทำงานมาสักพักเราพบว่างานของเรา มีการเขียนที่ยุ่งเหยิง จึง refector ซักหน่อย


  • add file functional_test
การเขียนโปรแกรมที่ดีย่อมต้องมีการเขียน Test ดังนั้นเราจึงมาทำ Function Test กัน


  • can remove word but don't have database
ในตอนนี้งานของเราสามารถที่จะลบคำได้แล้ว แต่ยังไม่มี Database sqlite 



  • Login don't have database
ในตอนนี้งานของเราสามารถที่จะ Login หรือ Sign up ได้แล้ว แต่ยังไม่มี Database sqlite 



  • Add bootstrap 4 for design web
เพิ่ม Bootstrap 4 (เบื้องต้น) เข้าไปในงาน เพื่อตกแต่งให้หน้าเว็บมีความสวยงาม