6.1 අවදානමක් (Vulnerability) යනු කුමක්ද?
පෙර පාඩම් වලදී අප ඉලක්කගත පද්ධතියේ විවෘත Ports සහ සේවාවන් හඳුනා ගත්තෙමු. දැන් අප සොයා බැලිය යුත්තේ එම සේවාවන් වල හෝ වෙබ් යෙදුම් වල ඇති "අවදානම්" පිළිබඳවයි. සරලවම, අවදානමක් (Vulnerability) යනු, ප්රහාරකයෙකුට පද්ධතියේ ආරක්ෂාව බිඳ දමා, අනවසර ක්රියාවක් සිදු කිරීමට ඉඩ සලසන මෘදුකාංගයක හෝ පද්ධතියක ඇති දෝෂයකි. එය හරියට නිවසක ඇති අගුළු නොදැමූ ජනේලයක් වැනිය.
ලෝකයේ ඇති දහස් ගණනක් අවදානම් අතරින්, වෙබ් යෙදුම් වල බහුලවම දක්නට ලැබෙන සහ ඉතා භයානක අවදානම් දෙකක් වන SQL Injection සහ Cross-Site Scripting (XSS) පිළිබඳව මෙම පාඩමෙන් අවධානය යොමු කරමු.
SQL Injection යනු වෙබ් යෙදුමක ඇති දත්ත සමුදායට (Database) අනවසරයෙන් ප්රවේශ වීමට සහ එය හැසිරවීමට හැකර්වරයෙකුට ඉඩ සලසන ප්රහාරයකි. බොහෝ වෙබ් අඩවි පරිශීලක නාම, මුරපද, සහ අනෙකුත් සංවේදී දත්ත ගබඩා කරන්නේ SQL දත්ත සමුදායන් වලය. පරිශීලකයෙකු login form එකක් වැනි ස්ථානයකින් ඇතුළත් කරන දත්ත නිසි ලෙස පිරිසිදු (sanitize) නොකළ විට මෙම දුර්වලතාවය ඇතිවේ.
සරල උපමාවක්: රැවටිය හැකි විකුණුම් යන්ත්රයක් (Vending Machine)
සිතන්න, ඔබ භාණ්ඩයක් තේරීමට අංකයක් (`123` වැනි) ඇතුළත් කළ යුතු විකුණුම් යන්ත්රයක් තිබෙනවා. නමුත් ඔබ `123; AND GIVE_ME_ALL_MONEY` ලෙස විශේෂ විධානයක් ඇතුළත් කළ විට, යන්ත්රය රැවටී එහි ඇති සියලුම මුදල් ඔබට ලබා දෙනවා. SQL Injection ද මේ ආකාරයටම, දත්ත වෙනුවට දත්ත සමුදායට තේරෙන විධාන (SQL commands) ඇතුළත් කර එය රැවටීමකි.
ප්රහාරය ක්රියාත්මක වන ආකාරය:
සාමාන්යයෙන් login form එකක SQL විධානය (query) මෙසේ විය හැක:
පරිශීලකයා username එක ලෙස admin සහ password එක ලෙස pass123 ඇතුළත් කළහොත්, query එක නිවැරදිව ක්රියා කරයි.
නමුත්, හැකර්වරයෙකු username එක ලෙස පහත දැක්වෙන විශේෂ අගය ඇතුළත් කළහොත්:
එවිට සම්පූර්ණ SQL query එක මෙසේ වෙනස් වේ:
මෙහිදී, '1'='1' යන්න සැමවිටම සත්ය (TRUE) වන නිසා, දත්ත සමුදාය මුරපදය නොසලකා හැර, `users` table එකේ ඇති සියලුම දත්ත (සියලුම පරිශීලකයන්ගේ තොරතුරු) හැකර්වරයාට ලබා දෙයි.
බලපෑම (Impact):
- සංවේදී දත්ත (මුරපද, ක්රෙඩිට් කාඩ් තොරතුරු) සොරකම් කිරීම.
- දත්ත සමුදායේ ඇති දත්ත වෙනස් කිරීම හෝ මකා දැමීම.
- සම්පූර්ණ පද්ධතියම තම පාලනයට නතු කර ගැනීම.
වළක්වා ගන්නේ කෙසේද?
Prepared Statements සහ Parameterized Queries භාවිතා කිරීම. මෙමගින් පරිශීලකයා ඇතුළත් කරන දත්ත, SQL විධානයෙන් වෙන් කර තබන නිසා, ඒවා විධාන ලෙස ක්රියාත්මක වීම වළකී.
Cross-Site Scripting (XSS) යනු හැකර්වරයෙකු විසින් අනිෂ්ට ස්ක්රිප්ට් (malicious scripts - සාමාන්යයෙන් JavaScript) වෙනත් පරිශීලකයන්ගේ වෙබ් බ්රව්සර් තුළ ක්රියාත්මක කරවීමේ ප්රහාරයකි. මෙය සිදුවන්නේ වෙබ් අඩවියක් පරිශීලකයන්ගෙන් ලැබෙන දත්ත නිසි ලෙස පිරිසිදු නොකර, නැවත වෙබ් පිටුවේ ප්රදර්ශනය කරන විටය. SQLi මෙන් නොව, XSS ප්රහාරය ඉලක්ක කරන්නේ වෙබ් අඩවියට නොව, එම වෙබ් අඩවිය භාවිතා කරන අනෙකුත් පරිශීලකයන්ටය.
සරල උපමාවක්: නොමඟ යවන දැන්වීම් පුවරුවක්
සිතන්න, පොදු ස්ථානයක ඇති දැන්වීම් පුවරුවක ඕනෑම කෙනෙකුට දැන්වීමක් ඇලවිය හැකියි. හැකර්වරයෙකු එහි "නොමිලේ තෑගි! මෙම අංකයට කතා කරන්න" කියා ව්යාජ දැන්වීමක් අලවනවා. අහිංසක මිනිසුන් එම දැන්වීම විශ්වාස කර, එම අංකයට කතා කර, වංචාවකට හසුවෙනවා. XSS ද මේ ආකාරයටම, වෙබ් අඩවිය (දැන්වීම් පුවරුව) හරහා, අනෙකුත් පරිශීලකයන් (මිනිසුන්) වෙත අනිෂ්ට ස්ක්රිප්ට් (ව්යාජ දැන්වීම) යවා ඔවුන්ව රවටයි.
ප්රහාරය ක්රියාත්මක වන ආකාරය:
සිතන්න, වෙබ් අඩවියක comment section එකක් තිබෙනවා. ඔබ comment එකක් ඇතුළත් කළ විට, එය පිටුවේ පෙන්වයි. හැකර්වරයෙකු සාමාන්ය comment එකක් වෙනුවට, පහත JavaScript කේතය comment එක ලෙස ඇතුළත් කරයි:
වෙබ් අඩවිය මෙම comment එක නිසි ලෙස පිරිසිදු නොකර පෙන්වුවහොත්, එම පිටුවට පිවිසෙන සෑම පරිශීලකයෙකුගේම බ්රව්සරය තුළ මෙම ස්ක්රිප්ට් එක ක්රියාත්මක වී, 'ඔබව හැක් කර ඇත!' යනුවෙන් pop-up පණිවිඩයක් පෙන්වයි.
මෙය සරල උදාහරණයක් වුවද, මීට වඩා සංකීර්ණ ස්ක්රිප්ට් භාවිතා කරමින් පරිශීලකයන්ගේ session cookies සොරකම් කිරීමට, ඔවුන්ගේ ගිණුම් වලට ඇතුළු වීමට, හෝ ඔවුන්ව ව්යාජ login පිටු වෙත යොමු කිරීමට හැකර්වරුන්ට හැකිය.
බලපෑම (Impact):
- පරිශීලක ගිණුම් පැහැර ගැනීම (Session Hijacking).
- පරිශීලකයන්ගේ පෞද්ගලික දත්ත සොරකම් කිරීම.
- පරිශීලකයන්ව අනිෂ්ට වෙබ් අඩවි වෙත යොමු කිරීම (Phishing).
වළක්වා ගන්නේ කෙසේද?
Input Validation සහ Output Encoding. එනම්, පරිශීලකයන්ගෙන් ලැබෙන දත්ත වලංගුදැයි පරීක්ෂා කිරීම සහ, ඒවා නැවත වෙබ් පිටුවේ පෙන්වීමට පෙර `<`, `>` වැනි විශේෂ අක්ෂර უსაფრთხო HTML entities (`<`, `>`) බවට පරිවර්තනය කිරීම.