මීට මාස කිහිපයකට පෙර, අපගේ ටෙස්ට් පරිසරයේ /admin/videos/delete මාර්ගයට බොට් එකක් POST ඉල්ලීමක් කරමින් පලතුරු ලැයිස්තුවක් මකා දමා තිබුණි. ඒ ඉල්ලීමේ සමඟ සැබැදි සෙෂන් කුකී එකක් තිබුණි, එම නිසා බ්රවුසරය ඒ කුකී එක අපගේ ඩොමේනයට යැවූ අතර, ඇඩ්මින් පැනලය එය විශ්වාස කරමින් ඉල්ලීම සම්මත කළා.
මෙය CSRF (Cross‑Site Request Forgery) නමින් හැඳින්වෙන ආකාරයේ පූර්ණ අවදානමකි. PHP Video Admin Panel එකේ "Approve", "Delete", "Promote to homepage" වැනි ක්රියාකාරකම් සියල්ල POST ඉල්ලීම් මගින් සිදු වන අතර, ඒවා සත්යාපනය කරන්නේ ලොග්‑ඉන් සෙෂන් කුකී එක පමණයි. එබැවින්, අනික් වෙබ් අඩවියකින් පවා පරිශීලකයාගේ බ්රවුසරය භාවිතා කර මෙම කුකී එක යවනවා නම්, පැනලය එය සත්ය ලෙස ගනී.
ඒ නිසා, අපි PHP 8.4 පදනම්ව Double‑Submit Cookie පදනමක් භාවිතා කරමින් CSRF ආරක්ෂාව වැඩිදියුණු කළා. සාම්ප්රදායික "Synchronizer Token" ක්රමය සෙෂන් තුළ ටෝකන් එකක් ගබඩා කර, ඒක ෆෝම් එකේ hidden field එකක් ලෙස දක්වයි. එය සාර්ථකව ක්රියා කරනවාට පවා, සෙෂන් ගොනුව හෝ Redis යතුර ලොක් වීම, ලිව්වීමේ බර වැඩි වීම වැනි ගැටළු ඇති කරයි. Double‑Submit Cookie ක්රමය ඒ ගැටලුව ඉවත් කරයි; සර්වර‑පාර්ශවයේ තැන්පත් කිරීමක් අවශ්ය නොවේ.
මෙම ක්රමයේ මුල් අදහස වන්නේ, රැඳී ඇති කුකී එකක් (random token) බ්රවුසරයට එවා, ඒක ෆෝම් එකේ hidden field එකක් හෝ AJAX හි X‑CSRF‑Token header එකක් ලෙස දක්වා, ඉල්ලීමේදී කුකී සහ බොඩී එකේ අගය සමානදැයි පරීක්ෂා කිරීමයි. එහෙයින්, අයුතු වෙබ් අඩවියක් කුකී එක යවා ගත හැකි නමුත්, JavaScript එකෙන් එය කියවීමට නොහැකි බැවින්, ඉල්ලීම සම්පූර්ණයෙන් අසාර්ථක වේ.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ බොහෝ සංවර්ධකයන්, විශ්වවිද්යාල සිසුන්, සහ තාක්ෂණික ව්යාපාරිකයින් PHP‑වලින් වෙබ් යෙදුම් රචනා කරන අතර, CSRF ආකාරයේ ආකර්ෂණීය අවදානමක් සමඟ මුහුණ පෑමට සිදුවේ. Double‑Submit Cookie පදනමක් භාවිතා කිරීමෙන්:
- සෙෂන් ලොක් වීමෙන් තොරව – අධික AJAX ක්රියාකාරකම් ඇති පැනලයන් සඳහා ඉල්ලීම් ත්රිවිධීකරණයක් නැතිව සිදු කළ හැකිය.
- කේතය අඩු සංකීර්ණ – සර්වර‑පාර්ශවයේ තැන්පත් කිරීමක් නොමැති නිසා, SQLite, Redis වැනි දත්ත ගබඩා පද්ධති භාරකාරකම් අඩු වේ.
- Cloudflare, LiteSpeed වැනි CDN/Edge Cache සමඟ Cache‑Control: private අවශ්ය නොවීම නිසා, කේෂ් කිරීමේ කාර්යක්ෂමතාව වැඩි වේ.
ඉන්පසු, ශ්රී ලංකාවේ තාක්ෂණික ආරක්ෂාව පිළිබඳව සත්ය ආකාරයේ පියවරක් ගන්නා ලෙස, සත්ය‑අත්යවශ්ය වෙබ් සේවා වලට මෙම ක්රමය යොදා ගැනීම ඉතා වැදගත් වේ.
අවසානයේ, අපගේ නිෂ්පාදනයේ භාවිතා කරන HMAC‑සහිත සයින් කරන ලද ටෝකන් සේවාව, සෙෂන් ID එකක් සමඟ රැඳී ඇති රැන්ඩම් වටිනාකමක් නිර්මාණය කර, එය 2 පැය කාල සීමාවක් තුළ වලංගු කරයි. මේ නිසා, කුකී එකක් අක්රමිකව සැකසීමේ අවදානම ඉතාම අඩුවේ.
ඔබේ වෙබ් අඩවියේ CSRF ආරක්ෂාව දැන්ම වැඩිදියුණු කර, පරිශීලකයින්ගේ විශ්වාසය තවත් ඉහළ ගත කරගන්න.