⚠️ අධ්යාපනික අනුකරණයක් පමණි | Educational Simulation Only. මෙය සැබෑ පද්ධතියක් නොවේ.
💡 උත්සාහ කර බලන්න (Hint):
සාමාන්ය මුරපදයක් වෙනුවට පහත කේතය Password එකට ටයිප කර "Login" ඔබන්න.
' OR '1'='1
SELECT * FROM users WHERE username = '' AND password = '';
📊 Query Result:
| id |
username |
role |
status |
| Waiting for query... |
🚨 SQL Injection සාර්ථක විය!
ඔබ සාර්ථකව පද්ධතියට ඇතුළු වූයේ මුරපදය දැනගෙන නොව, Database Query එකම වෙනස් කිරීමෙනි.
සිදුවූයේ කුමක්ද? (How it worked):
❌ Vulnerable Code (අසුරක්ෂිත):
query = "SELECT * FROM users
WHERE username = '" + username + "'
AND password = '" + password + "'";
→ මෙහිදී පරිශීලකයා ඇතුළත් කරන දේ කෙලින්ම Query එකට එකතු වේ.
✅ Secure Code (ආරක්ෂිත):
query = "SELECT * FROM users
WHERE username = ? AND password = ?";
statement.setString(1, username);
statement.setString(2, password);
→ Parameterized Queries මගින් ඇතුළත් කරන දත්ත කේතයක් ලෙස ක්රියාත්මක වීම වළක්වයි.
🛡️ SQL Injection වැළැක්වීමේ ක්රම:
- Parameterized Queries (Prepared Statements) භාවිතා කිරීම: මෙය SQLi වැළැක්වීමේ වඩාත්ම ඵලදායී ක්රමයයි. එමගින් දත්ත සහ කේත වෙන් කර හඳුනාගනී.
- Input Validation: පරිශීලකයා ඇතුළත් කරන දත්ත නිවැරදි ආකෘතියකින් යුත් දැයි පරීක්ෂා කිරීම (උදා: Email එකකට @ අකුරු තිබිය යුතුය).
- Least Privilege Principle: Database user account එකට අවශ්ය මට්ටමේ පමණක් බලතල (Permissions) ලබා දීම.
- Web Application Firewall (WAF): සැක සහිත SQL patterns හඳුනාගෙන අවහිර (Block) කිරීම.