අපි හැක් කරමු.SQL injection පියවරෙන් පියවර.
මුලින්ම කියන්න ඔන මන් මේ කියල දෙන කිසිම දෙයක් තවත් කෙනෙකුට කරදරයක් වෙන විදියට බාවිතා කරනන් එපා.මොකද අපි හැමොම මහන්සි වෙලයි නව නිර්මානයක් කරන්නේ.තමන්ගේ දැනුම තා කෙනෙකුට හිරිහැරයක් විදියට බාවිතා කරන්න නම් එපා.මොකද කරම් විපාක මේවටත් අදාලයි යලුවනේ.
හැකින්ග් කියන දේ එක මාසෙන් එක අවුරුද්දේන් ඉගන ගන්න පූවන් දෙයක් නෙමේ.ඔනෙම දෙයක් එහෙම තමයි.මට උනත් හැම දෙයක්ම අකුරක් නැර කීයලා දෙන්න බැ.මන් කියලා දෙන්නේ පාර විතරයි.ඒ පාරේ ගිහින් සාර්තක වෙන එක ඔයාලාගේ කැප වීමට බාරයි.
හැමදාම කියනවා වගේ මන් කොහේනත් කොපි කරපුව,පරිවර්තන නෙමේ.මන් මෙතනදි උත්සහා කරන්නේ පුලුවන් තරම සරලව පැහැදිලි කරනන.මුලින්ම මේ ලිපියේ අරමුන SQL injection වලට පදනම් සකසගන්න.ඉතිරිය ඉලග ලිපියේන් අපි ඇටැක් එකක් කරන්නේ කොහොමද,ඒ වගේ ඇටැක් එකකින් අපේ වෙබ් අඩවි ආරක්ශා කරගන්නේ කොහොමද කියලා ඉගන ගමු.
මුලින්ම තෙරුම ගන්න ඔන මෙක.ඔනම වෙබ් අඩවියක හො පද්දතියකක්ට සන්කීර්න සේවා සපයනන් තමන්ගෙම දත්ත ගබඩාවක් ඒ අදාල වෙබ් අඩවියට ,මුදෘකාන්ගයකට සමගාමිව ක්රියාත්මක වෙන දත්ත ගබඩාවක් අවශ්ය වෙනවා.මේ දත්ත ගබඩාව්ට දත්ත ඇතුල් කරන්න,වෙනස් කරන්න,මකන්න මේ වෙබ් අඩවියට ,මුදෘකාන්ගයට හැකියාව තියෙනවා,ඉට අමතරව එම දත්ත බාවිතා කරමින් බාවිතා කරන්නාගේ විදාන වලට ප්රතිචාර දක්වන්න හැකියාව තියෙනවා.
ඒ වගේ ලොකේ බොහො වෙබ් අඩවි සහ මුදෘකාන්ග බාවිතා කරන දත්ත ගබඩා වැඩසටහනක් තමයි SQL(Structured Query Language)කියන්නේ.SQL කියන්නේ තාක්ශනික ප්රමිතයක් වගේ දෙයක්.SQL වල විවිද වැඩසටහන් තියේනවා.නමුත් මේ සියල්ලහිම හරය එකයි.මෙතනදි අපේ අවදානය යොමු වෙන්නේ SQL වලට තමයි.ඉට අමතරව අපේ අරමුන වෙබ් අඩවියකට ප්රහාරයක් එල්ල කිරීම තමයි.
එතකොට MySQL කියන්නේ මොකක්ද?
ඔව් එකත් අපිට මෙතනදි වැදගත් වෙනවා.MySQL කියන්නේ අපේ වෙබ් අඩවියට දත්ත ගබඩාව්ට කතා කරන්න ,අපේ විදාන ක්රියත්මක කරලා තොරතුරු ලබා ගන්න ,වෙනස් කරන්න,මකන්න පුලුවන් බාශාවක්,නැත්තම් පද්දතියක්.
MySQL ලොකෙ බහුතරයක් වෙබ් අඩවි තමන්ගේ දත්ත ගබඩා සමග සම්බන්ද වෙන්න බාවිතා කරනවා.එක අපිට PHP,ASP,JSP,Python,Perl වගේ ප්රොග්රම් බාශා සමග බාවිතා කරන්න පුලුවන් වෙනවා.
මුලින්ම අපි හොදට තෙරුම් ගන්න ඔන වෙනවා වෙබ් අඩවියක් තමන්ගේ දත්ත ගබඩාවත් සමග ක්රියාත්මක වෙන්නේ කොහොමද කියලා.
උදාහරනෙකට ගමු අපි වෙබ් අඩවියකට අපේ යුසර් නෙම් එක සහ මුර පදය බාවිතා කරලා අතුල් වෙනවා කියලා එතනදි මොන වගේ ක්රියාවලියද ක්රියාත්මක වෙන්නේ?
මුලින්ම අපි අපේ යුසර් නේම් එකයි මුරපදයයි අදාල වෙබ් පිටුවේ අදාල තැන් වල ටයිප් කරලා සබ්මිට් කරපුවම අපේ වෙබ් බ්රව්සර් එක මගින් POST method (බොහො විට)එක හරහා අදාල වෙබ් අඩවියට යවනවා.
වෙබ් අඩවිය කරන්නේ අපි ඇතුල් කරපු දත්ත එයා අරගෙන ඒ දත්ත සමග තමන්ගෙ දත්ත ගබඩාවේ තියෙන දත්ත ගලපලා බලනවා.දත්ත ගබඩාවක දත්ත ගබඩා කරලා තියෙන්න වගු (tables) ආකාරයට.ඒ කියන්නේ හිතන්න වෙබ් අඩවියේ සාමාජිකයන්ගේ තොරතුරු ගබඩාකරලා තියෙන්නේ Users කියන වගුවෙ.එතකොට වෙබ් අඩවිය බලනවා අපි යොදපු යුසර් නේම් එක අදාල වගුවෙ තියෙනවද කියලා,ඉට පස්සේ බලනවා මේ යුසර් නෙම් එක තියෙන කෙනාගේ මුර පදය අපි යොදපු මුර පදයමද කියලා.ඒවා ගැලපෙනවා නම් අපිට වෙබ් අඩවියට යන්න පුලුවන් වෙනවා.වැරදි නම් එරර් එකක් එනවා.
මෙතනදි ඔයාලට එක දෙයක් තෙරෙන්න ඔන.මොකක්ද වෙබ් අඩවිය අපි යොදන දත්ත කෙලින්ම දත්ත ගබඩාවට යවලා බලනවා නම් අපිට පුලුවන් මෙතනදි MySQL විදානයක් යොදන්න යුසර් නේම් එක හරි මුර පදය හරි වෙනුවට.(සරලව කිව්වොත්.කියනතරම් ලෙසි නැ )එතකොට මේ වෙබ් අඩවිය නිර්මානය කරපු කෙනා මෙතනට තමන්ගේ අරක්ශාව යොදා ගෙන නැත්තම් අපිට SQL Injection attack ekak දෙන්න හැකියාව තියේනවා.
තව උදාහරනයක් බලමු.වෙබ් අඩවියක සාමාජිකයෙකුගේ ප්රොෆයිල් පේජ් එකක් තියේනවා එකේ වෙබ් ලිපින්ය මේ විදියට තියෙන්නේ කියලා.
www.domain.com/user.php?id=1
ඉතින් වෙබ් අඩවියක ඉන්න සියලුම සමාජිකයන්ට වෙන වෙනම් ප්රොෆයිල් පේජ් හදන්නේ නැ සාමාන්යෙන්.කරන්න එක ප්රොෆයිල් පේජ් එකක් හදනවා.එක තමයි ප්රොෆයිල් පේජ් එකේ ආකෘතිය.මේකේ කිසිම කෙනෙකුගේ තොරතුරු නැ.ඔයලා මන් ඉහත දක්වපු වෙබ් ලිපිනයේ අගට මෙහෙම දෙයක් තියේනවා( id=1)නේද?
මොකද්ද මෙතනදි වෙන්නේ ?
=1 කියලා එකෙන් ගන්නේ අදාල සාමාජික්යාගේ User id එක.එක තමයි ප්රදාන වේරියබල්(දත්තය ) විදියට අරගෙන අනෙකුත් දත්ත ප්රොෆයිල් පේජ් එකේ පෙනන්නේ.මෙතනදි හැම සාමාජිකයෙකුට වෙන වෙන්ම user id තියෙන්න ඔන.
වෙබ් පිටුව මෙතනදි මොකක්ද කරන්නේ.එයා ගන්නවා එකේ තියෙන එක.අරගෙන ඩෙටාබේස් එකට ගිහින් ඒ එක තියෙන සාමාජිකයගෙ අනෙකුත් විස්තර අරගෙන නැවත වෙබ් පිටුවට එනවා.ඇවිත් අදාල සාමාජිකයගේ තොරතුරු නම,ගම,විද්යුත් ලිපිනය වගේ දේවල් වෙබ් පිටුවේ අදාල තැන් වල පෙන්වනවා.මෙතනදිත් වෙබ් අඩවියේ නිර්මානකරුවා අරක්ශන ක්රම බාවිතා කරලා නැත්තම් බඩුම තමයි.
ඔනැම පරිගනක මුදෘකාන්ගයකට වැඩ කරන්නේ එක නිර්මානය කරන පුද්ගලයා එකට කරන්න්න කියලා විදාන කරලා තියෙන විදියට විතරයි.එකට හැකියාවක් නැ හිතලා තිරන ගන්න.ඔනම මුදෘකාන්ග ඉන්ජිනේරුවෙක් අතින් වැරදි,අතපසු වීම් වෙන්න පුලුවන් ඔන තරම.100% ආරක්ශිත සම්පූරන නිර්මානයක් කාටවත් කරන්න බැ.ඒ වැරදි සහ අතපසු වීම් තමයි හැකර් කෙනෙක් හොයාගෙන පහර දෙන්නේ.
හප්පා දවස් 2ක් තිස්සේ කෙටුවා.ලබන ලිපියෙන් බයිලා නැතිව ගේමක් දෙමු.
එහනම් මන් ගියා.
රශොද්
මේ ලිපිය ගත්තෙ මගේම බ්ලොග් එකෙන් තමයි.ඔය නිකන් ඉන්න ගමන් රෙපකින් දමලා ගැහුවට කමක් නැ.

source
මුලින්ම කියන්න ඔන මන් මේ කියල දෙන කිසිම දෙයක් තවත් කෙනෙකුට කරදරයක් වෙන විදියට බාවිතා කරනන් එපා.මොකද අපි හැමොම මහන්සි වෙලයි නව නිර්මානයක් කරන්නේ.තමන්ගේ දැනුම තා කෙනෙකුට හිරිහැරයක් විදියට බාවිතා කරන්න නම් එපා.මොකද කරම් විපාක මේවටත් අදාලයි යලුවනේ.
හැකින්ග් කියන දේ එක මාසෙන් එක අවුරුද්දේන් ඉගන ගන්න පූවන් දෙයක් නෙමේ.ඔනෙම දෙයක් එහෙම තමයි.මට උනත් හැම දෙයක්ම අකුරක් නැර කීයලා දෙන්න බැ.මන් කියලා දෙන්නේ පාර විතරයි.ඒ පාරේ ගිහින් සාර්තක වෙන එක ඔයාලාගේ කැප වීමට බාරයි.
හැමදාම කියනවා වගේ මන් කොහේනත් කොපි කරපුව,පරිවර්තන නෙමේ.මන් මෙතනදි උත්සහා කරන්නේ පුලුවන් තරම සරලව පැහැදිලි කරනන.මුලින්ම මේ ලිපියේ අරමුන SQL injection වලට පදනම් සකසගන්න.ඉතිරිය ඉලග ලිපියේන් අපි ඇටැක් එකක් කරන්නේ කොහොමද,ඒ වගේ ඇටැක් එකකින් අපේ වෙබ් අඩවි ආරක්ශා කරගන්නේ කොහොමද කියලා ඉගන ගමු.
මුලින්ම තෙරුම ගන්න ඔන මෙක.ඔනම වෙබ් අඩවියක හො පද්දතියකක්ට සන්කීර්න සේවා සපයනන් තමන්ගෙම දත්ත ගබඩාවක් ඒ අදාල වෙබ් අඩවියට ,මුදෘකාන්ගයකට සමගාමිව ක්රියාත්මක වෙන දත්ත ගබඩාවක් අවශ්ය වෙනවා.මේ දත්ත ගබඩාව්ට දත්ත ඇතුල් කරන්න,වෙනස් කරන්න,මකන්න මේ වෙබ් අඩවියට ,මුදෘකාන්ගයට හැකියාව තියෙනවා,ඉට අමතරව එම දත්ත බාවිතා කරමින් බාවිතා කරන්නාගේ විදාන වලට ප්රතිචාර දක්වන්න හැකියාව තියෙනවා.
ඒ වගේ ලොකේ බොහො වෙබ් අඩවි සහ මුදෘකාන්ග බාවිතා කරන දත්ත ගබඩා වැඩසටහනක් තමයි SQL(Structured Query Language)කියන්නේ.SQL කියන්නේ තාක්ශනික ප්රමිතයක් වගේ දෙයක්.SQL වල විවිද වැඩසටහන් තියේනවා.නමුත් මේ සියල්ලහිම හරය එකයි.මෙතනදි අපේ අවදානය යොමු වෙන්නේ SQL වලට තමයි.ඉට අමතරව අපේ අරමුන වෙබ් අඩවියකට ප්රහාරයක් එල්ල කිරීම තමයි.
එතකොට MySQL කියන්නේ මොකක්ද?
ඔව් එකත් අපිට මෙතනදි වැදගත් වෙනවා.MySQL කියන්නේ අපේ වෙබ් අඩවියට දත්ත ගබඩාව්ට කතා කරන්න ,අපේ විදාන ක්රියත්මක කරලා තොරතුරු ලබා ගන්න ,වෙනස් කරන්න,මකන්න පුලුවන් බාශාවක්,නැත්තම් පද්දතියක්.
MySQL ලොකෙ බහුතරයක් වෙබ් අඩවි තමන්ගේ දත්ත ගබඩා සමග සම්බන්ද වෙන්න බාවිතා කරනවා.එක අපිට PHP,ASP,JSP,Python,Perl වගේ ප්රොග්රම් බාශා සමග බාවිතා කරන්න පුලුවන් වෙනවා.
මුලින්ම අපි හොදට තෙරුම් ගන්න ඔන වෙනවා වෙබ් අඩවියක් තමන්ගේ දත්ත ගබඩාවත් සමග ක්රියාත්මක වෙන්නේ කොහොමද කියලා.
උදාහරනෙකට ගමු අපි වෙබ් අඩවියකට අපේ යුසර් නෙම් එක සහ මුර පදය බාවිතා කරලා අතුල් වෙනවා කියලා එතනදි මොන වගේ ක්රියාවලියද ක්රියාත්මක වෙන්නේ?
මුලින්ම අපි අපේ යුසර් නේම් එකයි මුරපදයයි අදාල වෙබ් පිටුවේ අදාල තැන් වල ටයිප් කරලා සබ්මිට් කරපුවම අපේ වෙබ් බ්රව්සර් එක මගින් POST method (බොහො විට)එක හරහා අදාල වෙබ් අඩවියට යවනවා.
වෙබ් අඩවිය කරන්නේ අපි ඇතුල් කරපු දත්ත එයා අරගෙන ඒ දත්ත සමග තමන්ගෙ දත්ත ගබඩාවේ තියෙන දත්ත ගලපලා බලනවා.දත්ත ගබඩාවක දත්ත ගබඩා කරලා තියෙන්න වගු (tables) ආකාරයට.ඒ කියන්නේ හිතන්න වෙබ් අඩවියේ සාමාජිකයන්ගේ තොරතුරු ගබඩාකරලා තියෙන්නේ Users කියන වගුවෙ.එතකොට වෙබ් අඩවිය බලනවා අපි යොදපු යුසර් නේම් එක අදාල වගුවෙ තියෙනවද කියලා,ඉට පස්සේ බලනවා මේ යුසර් නෙම් එක තියෙන කෙනාගේ මුර පදය අපි යොදපු මුර පදයමද කියලා.ඒවා ගැලපෙනවා නම් අපිට වෙබ් අඩවියට යන්න පුලුවන් වෙනවා.වැරදි නම් එරර් එකක් එනවා.
මෙතනදි ඔයාලට එක දෙයක් තෙරෙන්න ඔන.මොකක්ද වෙබ් අඩවිය අපි යොදන දත්ත කෙලින්ම දත්ත ගබඩාවට යවලා බලනවා නම් අපිට පුලුවන් මෙතනදි MySQL විදානයක් යොදන්න යුසර් නේම් එක හරි මුර පදය හරි වෙනුවට.(සරලව කිව්වොත්.කියනතරම් ලෙසි නැ )එතකොට මේ වෙබ් අඩවිය නිර්මානය කරපු කෙනා මෙතනට තමන්ගේ අරක්ශාව යොදා ගෙන නැත්තම් අපිට SQL Injection attack ekak දෙන්න හැකියාව තියේනවා.
තව උදාහරනයක් බලමු.වෙබ් අඩවියක සාමාජිකයෙකුගේ ප්රොෆයිල් පේජ් එකක් තියේනවා එකේ වෙබ් ලිපින්ය මේ විදියට තියෙන්නේ කියලා.
www.domain.com/user.php?id=1
ඉතින් වෙබ් අඩවියක ඉන්න සියලුම සමාජිකයන්ට වෙන වෙනම් ප්රොෆයිල් පේජ් හදන්නේ නැ සාමාන්යෙන්.කරන්න එක ප්රොෆයිල් පේජ් එකක් හදනවා.එක තමයි ප්රොෆයිල් පේජ් එකේ ආකෘතිය.මේකේ කිසිම කෙනෙකුගේ තොරතුරු නැ.ඔයලා මන් ඉහත දක්වපු වෙබ් ලිපිනයේ අගට මෙහෙම දෙයක් තියේනවා( id=1)නේද?
මොකද්ද මෙතනදි වෙන්නේ ?
=1 කියලා එකෙන් ගන්නේ අදාල සාමාජික්යාගේ User id එක.එක තමයි ප්රදාන වේරියබල්(දත්තය ) විදියට අරගෙන අනෙකුත් දත්ත ප්රොෆයිල් පේජ් එකේ පෙනන්නේ.මෙතනදි හැම සාමාජිකයෙකුට වෙන වෙන්ම user id තියෙන්න ඔන.
වෙබ් පිටුව මෙතනදි මොකක්ද කරන්නේ.එයා ගන්නවා එකේ තියෙන එක.අරගෙන ඩෙටාබේස් එකට ගිහින් ඒ එක තියෙන සාමාජිකයගෙ අනෙකුත් විස්තර අරගෙන නැවත වෙබ් පිටුවට එනවා.ඇවිත් අදාල සාමාජිකයගේ තොරතුරු නම,ගම,විද්යුත් ලිපිනය වගේ දේවල් වෙබ් පිටුවේ අදාල තැන් වල පෙන්වනවා.මෙතනදිත් වෙබ් අඩවියේ නිර්මානකරුවා අරක්ශන ක්රම බාවිතා කරලා නැත්තම් බඩුම තමයි.
ඔනැම පරිගනක මුදෘකාන්ගයකට වැඩ කරන්නේ එක නිර්මානය කරන පුද්ගලයා එකට කරන්න්න කියලා විදාන කරලා තියෙන විදියට විතරයි.එකට හැකියාවක් නැ හිතලා තිරන ගන්න.ඔනම මුදෘකාන්ග ඉන්ජිනේරුවෙක් අතින් වැරදි,අතපසු වීම් වෙන්න පුලුවන් ඔන තරම.100% ආරක්ශිත සම්පූරන නිර්මානයක් කාටවත් කරන්න බැ.ඒ වැරදි සහ අතපසු වීම් තමයි හැකර් කෙනෙක් හොයාගෙන පහර දෙන්නේ.
හප්පා දවස් 2ක් තිස්සේ කෙටුවා.ලබන ලිපියෙන් බයිලා නැතිව ගේමක් දෙමු.
එහනම් මන් ගියා.
රශොද්
මේ ලිපිය ගත්තෙ මගේම බ්ලොග් එකෙන් තමයි.ඔය නිකන් ඉන්න ගමන් රෙපකින් දමලා ගැහුවට කමක් නැ.


source
