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


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

Monday, April 9, 2018

Bitcoin and Blockchain (Week 11)


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


Why they choose BitCoin ?
บิทคอยน์เกิดจากแนวคิดที่ว่ามีคนต้องการระบบเงินใหม่ที่ไม่ถูกตรวจสอบขึ้นมา จากเดิมที่มีระบบธนาคารกลางเป็นผู้ดูแล และมีหน้าที่กำหนดมาตรฐาน รวมถึงมูลค่าของเงิน ทำให้ธุรกรรมทางการเงินทุกอย่างที่เกิดขึ้นอยู่ในสายตาของธนาคารกลางนั้นเอง แต่กระบวนการเหล่านี้อาจจะไม่ค่อยถูกใจบรรดาธุรกิจใต้ดิน เพราะต้องระบุตัวตน เวลาโอนเงินก็ต้องผ่านตัวกลาง ทำให้ถูกตรวจสอบได้ง่าย


How does BitCoin work ?มีโปรแกรมเมอร์ชาวญี่ปุ่นคนหนึ่งที่ใช้นามแฝงว่า ซาโตชิ นากาโมโต้ ได้สร้างระบบที่เรียกว่า “Blockchain” ออกมา ซึ่งเป็นระบบเพื่อป้องกันการเกิดภาวะเงินเฟ้อและเสื่อมค่าลงอย่างรวดเร็วของสกุลเงินดิจิทัล จากการปั๊มเงินออกมาเรื่อย ๆ ได้ตามใจชอบ โดยนำระบบการทำงานของอัลกอริทึมมาใช้ แล้วกำหนดปริมาณเงินในระบบไว้ไม่ให้เกิน 21 ล้านหน่วย ทำให้บิทคอยน์เริ่มเป็นที่นิยมมากขึ้น เนื่องจากมีระบบป้องกันเงินเฟ้อนั่นเอง


What is blockchain ?
Blockchain คือเทคโนโลยีอัจฉริยะ ที่บันทึกข้อมูลในรูปแบบของ Block และแต่ละ Block จะบรรจุไว้ด้วยข้อมูลในรูปของ Hash (สมการทางคณิตศาสตร์ชนิดหนึ่ง หรือการเข้ารหัสนั่นเอง) ที่ต้องใช้กำลังการประมวลผลของชิปคอมพิวเตอร์ในการแก้สมการ เพื่อทำให้เกิดธุรกรรมขึ้น


Why you choose Blockchain ?
เป็นระบบกระจายการเก็บข้อมูลไปหลายๆ คนที่อยู่ในระบบเดียวกัน ทุกคนในระบบ จะมีข้อมูลชนิดเดียวกัน และ ตรวจสอบกันเองเสมอ ปลอมแปลงได้ยาก ทำให้สะดวก, รวดเร็ว,ปลอดภัย, ลดการใช้ทรัพยากร


How does blockchain work ?
จุดเด่นของ Blockchain นั้น คือ ข้อมูลธุรกรรมจะไม่ขึ้นอยู่กับใครคนใดคนหนึ่ง แต่อาศัยการยืนยันความถูกต้องจากทุกคน แต่หากต้องกระทำธุรกรรมการเงินจะต้องใช้ Private Key ที่อยู่กับเจ้าของและ Public Key ที่อยู่กับคนอื่นในการถอดรหัส


ปัญหาที่พบ
 อธิบายการทำงานของ  Blockchain ผิด เพราะไม่เข้าใจการทำงานของมัน วิธีแก้นั้น คือ ลองถามเพื่อนที่เข้าใจดู อาจช่วยเราได้

Tuesday, March 27, 2018

แปล Basics of Functional Dependencies and Normalization for Relational Databases (Week 11)

แนวทางที่ 1

  • ออกแบบ Relation schema ที่ง่ายต่อการเข้าใจ่
  • อย่ารวม attribute จาก multiple entity และ relationship type มากับ single relation
  • จากภาพเป็นส่วนของ Employee ที่เพิ่ม Dname, Dmgr_ssn (เกิดจากการผสมของ distinct real-world entities ของ employees กับ department)



  • มีข้อมูลที่ซ้ำกันใน EMP_DEPT ซึ่งส่งผลทำให้พื้นที่ในการจัดเก็บข้อมูล ซึ่งแก้โดยการ Update anomalies (EMPLOYEE x DEPARTMENT)

ชนิดของการ Update anomalies มี
  • Insertion
  • Deletion
  • Modification
Insertion Anomalies
  • เมื่อเพิ่ม tuple ใหม่ลงไปใน employee ที่ทำงานใน department มี Dnumber คือ 5 แล้ว attitbute value of department ทั้งหมดที่เป็น 5 เป็น consistent
Deletion Anomalies
  • ถ้าลบ employee ที่อยู่ตัวสุดท้ายแล้ว ข้อมูลที่อยู่ department เดียวกันก็จะถูกลบด้วย เช่น หากลบ Borg แล้วจะลบ Headquarters ด้วย
Modification Anomalies
  • หากเปลี่ยน manager ของ department 5 เราต้อง update ค่าใน tuple ของ employee ทั้งหมดที่ทำงานใน department นี้ แล้ว Database จะเปลี่ยนเป็น inconsistent
แนวทางที่ 2
  • ออกแบบ base relation schema ที่ไม่มีการ update anomalies
  • ถ้ามี anomalies (เพื่อเพิ่มประสิทธิภาพในการ query) ให้สังเกตและตรวจสอบให้แน่ใจว่าโปรแกรมนั้นมีการ Update ที่ถูกต้องหรือไม่
แนวทางที่ 3
  • หลีกเลี่ยงการวาง Attribute ที่อยู่ใน base relation ซึ่งมีค่าส่วนใหญ่เป็น NULL
  • หากหลีกเลี่ยงเกิด NULL ไม่ได้ ให้ Make sure ว่าใช้ในกรณีพิเศษเท่านั้น ไม่ใช้กับ tuple หลัก
  • เช่น ถ้า 15% ของ employee เป็น individual offices => ให้ทำการสร้าง attribute ชื่อ Office_number ใน EMPLOYEE relation
แนวทางที่ 4
  • การออกแบบ relation schema นั้นเราสามารถ join เงื่อนไขบน attribute ได้ตามความเหมาะสม (primary key, foreign key) ซึ่งการันตีได้ว่าไม่มี tuple นอกเงื่อนไขโผล่ขึ้นมา เพราะหากมีการหลีกเลี่ยง relation ที่มีการจับคู่ attribute ต่างๆ (foreign key, primary key) อาจทำให้เกิดการสร้าง Tuple นอกเงื่อนไขขึ้นมาได้ 

SQL injection (Week 16)

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