Thuta Learning
ရှာဖွေရန်
AdvancedSecuritybeginner

SQL Injection ဆိုတာ ဘာလဲ

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • SQL Injection ဆိုတာ ဘာလဲ ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • လက်တွေ့ scenario ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်
  • ကိုယ်တိုင်နဲ့ တခြားသူများအတွက်ပါ security risk ကို ရှောင်တတ်အောင် လုပ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Application က user input ကို sanitize/validate မလုပ်ဘဲ SQL query string ထဲ တိုက်ရိုက် ပေါင်းထားရင် attacker က input field ထဲ SQL code ရေးထည့်ပြီး query ရဲ့ logic ကို ပြောင်းလဲနိုင်ပါတယ် — login form ထဲ password field မှာ ' OR '1'='1 ရိုက်ထည့်ရင် authentication check ကို bypass ဖြစ်စေနိုင်ပါတယ်။ ဒါက data theft, data deletion, ဒါမှမဟုတ် server access ရယူတဲ့အထိ ဆိုးရွားနိုင်ပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

ဒီ vulnerability ကို ကာကွယ်ဖို့ parameterized query (prepared statement) သုံးရပါတယ် — user input ကို query structure ထဲ တိုက်ရိုက် string concatenation မလုပ်ဘဲ, placeholder ကိုသုံးပြီး database driver ကိုယ်တိုင် safely handle လုပ်ခိုင်းပါတယ်။ Modern framework (Django, Rails, Laravel) အများစုက default အနေနဲ့ ဒါကို handle လုပ်ပေးထားပေမယ့် raw SQL query ရေးတဲ့အခါ manual careful ဖြစ်ဖို့ လိုပါတယ်

အတူတူ ကြည့်မယ်

sql
-- Vulnerable (string concatenation)
SELECT * FROM users WHERE username = '" + userInput + "'

-- Attacker input: ' OR '1'='1
-- Resulting query: SELECT * FROM users WHERE username = '' OR '1'='1'
-- (authentication check bypassed!)

-- Safe (parameterized query)
SELECT * FROM users WHERE username = ?  -- placeholder, driver-handled
You should see
SQL Injection ဖြစ်ရပုံနဲ့ parameterized query ဖြင့် ကာကွယ်နည်းကို ရှင်းပြနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

'OR 1=1' ဆိုတဲ့ classic SQL injection payload က ဘာကြောင့် authentication check ကို bypass ဖြစ်စေတယ်ဆိုတာ query logic ကို step-by-step ရေးရှင်းကြည့်ပါ။

သတိလေးတစ်ချက်

Input sanitization ကို client-side (browser JavaScript) မှာပဲ မလုပ်ပါနှင့် — attacker က browser ကို ကျော်ပြီး server ကို တိုက်ရိုက် request ပို့နိုင်ပါတယ်, server-side validation က မဖြစ်မနေလိုအပ်ပါတယ်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Framework/ORM သုံးထားရင် SQL injection risk လုံးဝမရှိတော့ဘူးလို့ ယူဆခြင်း — raw query ရေးရင် risk ဆက်ရှိ
  • Client-side validation (JavaScript) ကိုပဲ security defense လို့ ထင်ခြင်း — server-side validation လိုအပ်ဆဲ

အခု ကိုယ်တိုင် စမ်းကြည့်

'OR 1=1' ဆိုတဲ့ classic SQL injection payload က ဘာကြောင့် authentication check ကို bypass ဖြစ်စေတယ်ဆိုတာ query logic ကို step-by-step ရေးရှင်းကြည့်ပါ။

You'll know it worked when: SQL Injection ဖြစ်ရပုံနဲ့ parameterized query ဖြင့် ကာကွယ်နည်းကို ရှင်းပြနိုင်မည်။