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 เคลื่อน

No comments:

Post a Comment

SQL injection (Week 16)

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