ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
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 ဖြစ်ဖို့ လိုပါတယ်
အတူတူ ကြည့်မယ်
-- 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-handledSQL 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 က မဖြစ်မနေလိုအပ်ပါတယ်။