လွယ်လွယ်ပြောရရင် SQL Injection ဆိုတာ Website ရဲ့ Login form လိုနေရာတွေကနေတစ်ဆင့် တိုက်ခိုက်သူတစ်ယောက်က Database ထဲကို ခိုးဝင်တဲ့ နည်းလမ်းတစ်ခု ဖြစ်ပါတယ်။
ဥပမာ ဘဏ်တစ်ခုကို စိတ်ကူးကြည့်လိုက်။ ဘဏ်ဝန်ထမ်းတစ်ယောက်က စာရွက်ပေါ်မှာ ရေးထားတဲ့အတိုင်း တစ်လုံးမကျန် လိုက်လုပ်တတ်တယ်။ ပုံမှန်ဆို စာရွက်ပေါ်မှာ “အကောင့် 12345 ကနေ ငွေ တစ်သောင်း ထုတ်ပေး” လို့ ရေးထားတယ်။ သူက အဲဒီအတိုင်း လုပ်ပေးတယ်။
ဒါပေမယ့် သူခိုးတစ်ယောက်က အဲဒီစာရွက်ထဲကို ပရိယာယ်နဲ့ စာတစ်ကြောင်း ထပ်ထည့်ရေးလိုက်တယ်။ “အကောင့် 12345 ကနေ ငွေ တစ်သောင်း ထုတ်ပေး။ ပြီးရင် အကောင့်တိုင်းက ငွေအားလုံး ထုတ်ပေး။” ဝန်ထမ်းက ရိုးရိုးသားသားနဲ့ ရေးထားတဲ့အတိုင်း အကုန်လိုက်လုပ်ပေးလိုက်တယ်။
SQL Injection လည်း ဒီအတိုင်းပါပဲ။ Website တွေရဲ့ နောက်ကွယ်မှာ Database ရှိတယ်။ User က Login form မှာ ရိုက်ထည့်တဲ့ စာကို Website က Database ကို မေးတဲ့ မေးခွန်းထဲ ထည့်သုံးတယ်။ တိုက်ခိုက်သူက အဲဒီအကွက်ထဲကို Database နားလည်တဲ့ စာကြောင်းတွေ ထည့်ရေးလိုက်တာ။ ဥပမာ username နေရာမှာ ' OR '1'='1 လို့ ရိုက်ထည့်လိုက်ရင် Database က “အိုကေ၊ ဒါက အမြဲတမ်း မှန်တဲ့ အခြေအနေ” လို့ ထင်ပြီး Login ပေးဝင်လိုက်တယ်။ Password မသိဘဲနဲ့။
ဒီနည်းနဲ့ နာမည်ကြီး Website တွေ၊ ကုမ္ပဏီတွေ data breach ဖြစ်ဖူးတာ အများကြီးရှိတယ်။ သန်းနဲ့ချီတဲ့ user အချက်အလက်တွေ ပေါက်ကြားဖူးတယ်။
ဒီမှာ အရေးကြီးတဲ့ အချက်တစ်ခု ရှိတယ်။ SQL Injection ကို ကာကွယ်ရမှာ User တွေရဲ့ အလုပ်မဟုတ်ဘူး။ Developer တွေရဲ့ အလုပ်ပါ။ User တစ်ယောက်အနေနဲ့ ဘာမှ လုပ်လို့မရဘူး — Website ကိုယ်တိုင်က အပေါက်ပါလာရင် ပါလာတာပဲ။
Developer တစ်ယောက်အနေနဲ့ ကာကွယ်နည်းကတော့ ရှင်းတယ် —
- User ရိုက်ထည့်တဲ့ စာကို Database မေးခွန်းထဲ တိုက်ရိုက်ထည့်မရေးနဲ့။ Parameterized query (prepared statement) သုံးပါ။
- Input validation လုပ်ပါ — မျှော်လင့်ထားတဲ့ ပုံစံမဟုတ်တဲ့ စာဆို လက်မခံနဲ့။
- Database အကောင့်ကို လိုအပ်တဲ့ permission ပဲ ပေးပါ။ အကုန်လုပ်လို့ရတဲ့ admin အကောင့်နဲ့ Website ကို မချိတ်နဲ့။
- Framework တွေ (Django, Laravel လို) သုံးရင် သူတို့ရဲ့ built-in protection ကို အားကိုးပါ။ ကိုယ့်ဟာကိုယ် SQL စာကြောင်း ဆက်စပ်ရေးတာကို ရှောင်ပါ။
ဒီလောက်ဆို SQL Injection ဆိုတာ ဘဏ်ဝန်ထမ်းကို စာရွက်အတုနဲ့ လှည့်စားသလိုမျိုး တိုက်ခိုက်မှုဆိုတာ သိလောက်ပြီ။ ကိုယ် developer ဆိုရင် ဒီအပေါက်ကို ဒီနေ့ပဲ ပိတ်ထားလိုက်။ နောက်မှဆိုတာ မရှိဘူး။