Sunday, May 6, 2018

SQL injection (Week 16)

SQL Injection

  • ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่องโหว่ในการโจมตีแบบ injection ได้

  • เมื่อ Hacker ป้อน ค่าบางอย่างตามด้วย OR 1=1 จะทำให้ ตัว SQL ไป query ข้อมูลทั้งหมดใน Table ออกมา และในกรณีนี้ Hacker จะได้รายชื่อ User ทั้งหมดที่มีในตารางพร้อมทั้ง password มีการเก็บ User id และ Password ในตารางเดียวกัน
  • ผลที่จะเป็นเช่นเดียวกับแบบ 1=1 เพราะมีการใช้เงื่อนไขสำหรับ User name และ Password เป็น “” OR “” = “”

  • ในบางกรณีที่ตัว SQL มีการรองรับคำสั่งแบบหลายคำสั่งพร้อมกันทำให้ Hacker สามารถแก้ไข Database ได้โดยเพิ่มเครื่องหมาย ‘;’ ตามด้วยคำสั่ง SQL อีกอันต่อท้าย ซึ่งในกรณีนี้จะทำให้ Table Suppliers ถูกลบทิ้ง
  • ในการเขียนคำสั่ง SQL มีการใส่ ‘?’ เพื่อเป็นสัญลักษณ์ที่แสดงให้เห็นว่าจะมีการนำ input จาก User มาใส่ แล้วจึงใช้คำสั่ง connection.query() ในการนำ input จาก User มาแทนที่ ‘?’ พร้อมกันคัดกรองคำสั่งที่ Hacker พยามแทรกมาออก

งานที่ฉันทำ
  • ทำหน้าเว็บหลัก

  • ย้ายจาก PostgreSQL เป็น MySQL
ใช้ JawsDB MySQL ใน Heroku

  • เอาหน้า Login/ Register เพิ่มใน Heroku

หน้า Sign Up
หน้า Log In

  • ทำหน้า About

  • นำ Cookies มาจดจำการ Log in
    • หากทำการ Log in แล้วหากไปหน้า Log in ซ้ำจะไปหน้าแรกแทน
    • ถ้า Log out จะลบ Cookies ออกไป

ปัญหาที่พบ
  • ตัดสินใจไม่ได้ว่าจะให้ redirect ผ่าน node JS หรือ JavaScript 
  • ไม่ต้องการให้ User ทั่วไป Log in ได้ เนื่องจากไม่มีความจำเป็นในการ Log inสำหรับ User ธรรมดา
  • รูปจาก Facebook สำหรับ about มีขนาดไม่เท่ากันทำให้ Layer เคลื่อน

Data Security (Week 15)


4 เทรนด์อันตรายด้าน Cybersecurity ที่ต้องเฝ้าระวังในปี 2561 นี้
การบุกรุกทางกายภาพตรงๆ
  • ติดตั้งแอนติไวรัสและไฟร์วอลล์ จนทำให้ผู้ไม่ประสงค์ดีกลุ่มหนึ่งเริ่มหันมาเจาะระบบหรือดูดข้อมูลกันแบบตรงๆ ด้วยการแอบบุกรุกเข้ามายังสำนักงานหรือบ้านของเหยื่อแทน ดังนั้นจึงไม่ควรมองข้ามระบบรักษาความปลอดภัยทางกายภาพอย่างสัญญาณเตือนภัยหรือกล้องวงจรปิดด้วย

แรนซั่มแวร์ยังคงมาแรง

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

การพลาดที่จะเตรียมรับกฎหมาย GDPR ได้ทันเวลา
  • ซึ่งเวลาเดดไลน์ดังกล่าวก็แค่เดือนหน้าเท่านั้นซึ่งการละเมิดกฎดังกล่าวอาจโดนค่าปรับขั้นต่ำ 20 ล้านยูโร หรือ 4% ของรายได้ทั้งหมดของบริษัทถ้ามากกว่า และจากผลการวิจัยของ Forrester ล่าสุดระบุว่า มีบริษัทที่ป่านนี้ยังไม่พร้อมมากถึง 80%

การโจมตีด้วยโทรจัน
  • โดยเฉพาะโทรจันที่เจาะจงแฮ็กระบบธนาคารโดยเฉพาะ ซึ่งใกล้ตัวคุณมากแค่คุณใช้บริการอีแบงกิ้งแล้วเผลอปล่อยให้โทรจันดูดข้อมูลรหัสผ่านไปใช้ดูดเงินออกจากบัญชีของคุณโดยไม่รู้ตัวเท่านั้น ปัจจุบันแก๊งโทรจันได้พัฒนาให้เข้ากับระบบใหม่ๆ ของธนาคารอย่างรวดเร็ว

ความปลอดภัยในงานของเรา

  • ตอนนี้ไม่โอเค
    • Heroku ใช้ Deploy ผ่าน Github
    • ลง Github ที่เป็นเห็นแบบสาธารณะ
    • ในโค้ดเก็บ Host, Username, Password ของ Database บน Github
    • ไม่ปลอดภัยมากๆ
    • แก้โดยการย้ายโค้ดลง Bitbucket ที่เปิดเป็น Private ได้
    • Heroku ให้ Deploy ผ่าน Heroku Git แทน
ส่วนที่ฉันทำใน Project
  • เปลี่ยนจากใช้ MySQL ของ google cloud platform เป็น postgreSQL ใน Heroku
ใช้ Heroku Postgres ใน Heroku

หน้าเว็บหลังติดต่อกับ PostgresSQL
ปัญหาที่พบ
  • จากเดิมที่ติดต่อกับ MySQL นั้น เราทำการอ่านจากไฟล์ที่มีโค้ดสำหรับ Query เพื่อให้ได้ตารางแสดงบนหน้าเว็บ แต่พอเปลี่ยนจาก MySQL เป็น PostgreSQL แล้วพออ่านโค้ดจากไฟล์แล้วใช้ไม่ได้ เลยต้องเปลี่ยนโค้ด แล้วใช้ Node.js จัดการอีกรอบแล้วแสดงผลการทดลอง
    • ก่อน : ใช้ MySQL
โค้ด SQL

โค้ด Node.js

    • หลัง : ใช้ PostgresSQL
โค้ด SQL

โค้ด Node.js

ลิ้งก์ที่เกี่ยวข้อง
https://www.enterpriseitpro.net/
https://database-g4-esport.herokuapp.com/
https://github.com/Nithichai/database_g4_project

เริ่มสร้างหน้าเว็บไซต์ (Week 13)

ปรับ ER Diagram


ปรับเปลี่ยนเครื่องมือ
  • Javascript
  • Node.js
    • Express.js
  • AngularJS
  • HTML5
  • MySQL
  • Jade
  • w3.css

ส่วนที่ผมทำ

  • เขียนหน้าเว็บไซต์
    • หน้าหลัก
    • ตารางการแข่งขัน
    • ตารางคะแนน
    • ตารางทีม
หน้าตารางการแข่งขัน

หน้าตารางคะแนน

ตารางทีม

เป็นหน้าเว็บ Responsive

ลิ้งก์ที่เกี่ยวข้อง

My Group Project (Week 12)

ซึ่งโปรเจคที่จะเลือกจะทำเป็น E-Sport Tournament Website


ทำไมถึงเลือกทำงานนี้
  • เราจัดทำเว็บไซต์ที่เกี่ยวกับการแข่งขัน E-Sport เพราะเราสนใจในด้านนี้
  • เนื่องจากในประเทศไทย ยังไม่มีเว็บไซต์ที่เป็นปฏิทินการแข่งขันหรือแสดงผลการแข่งขันที่เป็นทางการในไทย ดังนั้นเราจึงตัดสินใจทำมัน และหวังว่าจะได้นำไปใช้จริง

มี Content อะไรบ้าง
  • ตาราง/ปฏิทินการแข่งขัน
  • คะแนนการแข่งขันรวม
  • ทีมการแข่งขัน
  • อื่นๆ ….

ใช้เครื่องมืออะไรบ้าง


  • Javascript
  • Node.js
  • AngularJS
  • HTML5
  • MySQL


ออกแบบระบบ
  • ระบบจะแบ่งเป็นสองฝั่ง
  • โดยฝั่งแรกเป็นฝั่งแสดงผลข้อมูลการแข่งขันต่างๆ
    • แสดงตาราง/ปฏิทินการแข่งขัน + ผลการแข่งขันในแมตช์นั้น
    • แสดงตารางคะแนนรวมทั้งหมด
  • อีกฝั่งเป็นส่วนของที่ผู้ใช้ต้อง Login เข้าระบบเพื่อกรอกคะแนนหรือเพิ่มการแข่งขันในปฏิทิน เป็นต้น
  • ะบบที่จัดทำนั้นมี Reference จากการแข่งขัน Overwatch League
ER Diagram


สิ่งที่ผมได้ไปทดลอง


  • ใช้ MySQL ของ Google Cloud
สร้าง Database ขึ้นมา

เข้าหน้า Terminal สำหรับการจัดการ

สร้างตาราง team

สร้างตาราง competition


ลิ้งก์ที่เกี่ยวข้อง

SQL injection (Week 16)

SQL Injection ในบางครั้งนักพัฒนาใช้ method ‘+’ (concat) กับ String ที่เป็นคำสั่ง SQL เพื่อ query ข้อมูลที่ user ต้องการ ซึ่งทำให้เกิดช่...