SQLAlchemy ORM Python සංවර්ධකයන්ට SQL injection වලින් ආරක්ෂා වීමට ඉතා ප්රබල මෙවලමක්. සාමාන්ය ORM ක්රියාකාරකම් filter(), filter_by(), query() වැනි විධාන සියල්ලම පරාමිතීකරණ (parameterized) විධාන බවට පරිවර්තනය වෙයි. එමඟින් දත්ත වටිනාකම SQL වාක්යයෙන් වෙන්ව DB‑යට යවනු ලැබේ.
එහෙත් text() ෆන්ක්ශන් එක භාවිතා කරන විට මේ ආරක්ෂාව අඩු වේ. බොහෝ AI කේත ජනකයන් f‑string හෝ % formatting සමඟ text() ඇතුළත් කරමින්, සම්පූර්ණ SQL වාක්යයක් පෙරනිමියෙන් සකස් කරයි. එවිට පරාමිතීකරණය සිදු නොවීම නිසා, පරිශීලක‑ආදානයක් සෘජුවම SQL වාක්යයට එකතු වීමෙන් injection අවදානම උදාවේ.
උදාහරණයක් ලෙස, status = "shipped' OR '1'='1" යන අගයක් text() තුළ f‑string එකට එක් කළහොත්, WHERE status = 'shipped' OR '1'='1' ලෙස පරිවර්තනය වෙයි. එමඟින් සියලු ඇණවුම් ලැයිස්තුවක් පෙන්වයි, වඩාත්ම ගැලපෙන amount සීමාවක් නොමැතිව. මෙය DB‑යට පැමිණෙන අවසාන SQL වාක්යය, පරාමිතීකරණයක් නොලැබූ නිසා injection‑ට ඉතා සරල පාරක් වේ.
SQLAlchemy ලේඛනමය text() සඳහා “caller‑supplied values with string formatting should be avoided” කියා නිශ්චිත අනතුරු ඇඟවීමක් දක්වයි. ඒ වෙනුවට bindparams() භාවිතයෙන් පරාමිතීකරණය කරන්නේ ආරක්ෂිත ක්රමයයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ Python සංවර්ධකයන්, විශ්වවිද්යාල සිසුන්, තාක්ෂණික ව්යාපාරිකයින් සඳහා මෙය ප්රයෝජනවත් කරුණකි:
- AI‑උදව්කාරී කේත ජනකයන් භාවිතා කරන විට, text()‑ගෙන් සිදුවන injection අවදානම පිළිබඳ අවධානයක් ලබා ගත හැක.
- පරාමිතීකරණය නොකළ SQL ප්රශ්නවලින් පසුබැසීමෙන්, දත්ත රහස්යතාවය හා පද්ධති ස්ථායිතාවය රැකගත හැක.
- Bandit වැනි ස්ථාතික විශ්ලේෂක (B608) නීතියෙන් මෙම වැරදි සොයා ගත හැකි බැවින්, CI/CD පද්ධති තුළ ස්වයංක්රීය පරීක්ෂාවන් සකස් කරගත හැක.
- ආරක්ෂිත bindparams පරිහරණය කිරීමෙන්, දේශීය SaaS, fintech, e‑commerce වැනි ක්ෂේත්රවල ආරක්ෂාව වැඩිදුරටත් ශක්තිමත් වේ.
ඉතින්, ඔබේ ව්යාපෘතිවල raw SQL භාවිතය අවශ්ය නම්, එය bindparams() හෝ ORM‑යෙහි සම්පූර්ණයෙන්ම පරාමිතීකරණය කරමින් ලියන්න. AI කේත ජනකයන්ට “safe query” ලෙස පරීක්ෂා කිරීම අමතක නොකරන්න.
අවසානයේ, SQL injection අවදානම තවත් අඩු කිරීමට, කේත සමාලෝචන, ස්ථාතික විශ්ලේෂක, සහ නිවැරදි පරාමිතීකරණ පුරුදු එකතු කිරීම අත්යවශ්යයි.