සංවර්ධකයාට නොපෙනෙන කේතයට වෙනස්කම් හඳුන්වා දීමට ට්‍රෝජන් මූලාශ්‍ර ප්‍රහාරය

කේම්බ්‍රිජ් විශ්ව විද්‍යාලයේ පර්යේෂකයන් විසින් සම-සමාලෝචනය කරන ලද ප්‍රභව කේතයට නිශ්ශබ්දව අනිෂ්ට කේතය ඇතුළත් කිරීමේ තාක්ෂණයක් ප්‍රකාශයට පත් කර ඇත. සකස් කරන ලද ප්‍රහාරක ක්‍රමය (CVE-2021-42574) ට්‍රෝජන් මූලාශ්‍රය යන නාමය යටතේ ඉදිරිපත් කර ඇති අතර එය සම්පාදකයාට/පරිවර්තකයාට සහ කේතය බලන පුද්ගලයාට වෙනස් ලෙස පෙනෙන පෙළ සැකසීම මත පදනම් වේ. C, C++ (gcc සහ clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go සහ Python සඳහා සපයන විවිධ සම්පාදක සහ පරිවර්තකයන් සඳහා ක්‍රමයේ උදාහරණ නිරූපණය කෙරේ.

මෙම ක්‍රමය පදනම් වී ඇත්තේ ද්විපාර්ශ්වික පෙළෙහි සංදර්ශක අනුපිළිවෙල වෙනස් කරන කේත අදහස්වල විශේෂ යුනිකෝඩ් අක්ෂර භාවිතය මත ය. එවැනි පාලන අක්ෂර ආධාරයෙන්, පෙළෙහි සමහර කොටස් වමේ සිට දකුණට පෙන්විය හැකි අතර අනෙක් අය - දකුණේ සිට වමට. එදිනෙදා භාවිතයේදී, එවැනි පාලන අක්ෂර භාවිතා කළ හැකිය, උදාහරණයක් ලෙස, ගොනුවකට හෙබ්‍රෙව් හෝ අරාබි භාෂාවෙන් කේත රේඛා ඇතුළත් කිරීමට. නමුත් ඔබ එක් පේළියක විවිධ පෙළ දිශාවන් සමඟ රේඛා ඒකාබද්ධ කරන්නේ නම්, නිශ්චිත අක්ෂර භාවිතා කරමින්, දකුණේ සිට වමට සංදර්ශණය වන පෙළෙහි ඡේදවල වමේ සිට දකුණට දර්ශනය වන සාමාන්‍ය පෙළ අතිච්ඡාදනය විය හැක.

මෙම ක්‍රමය භාවිතා කරමින්, ඔබට කේතයට අනිෂ්ට නිර්මාණයක් එක් කළ හැක, නමුත් පසුව කේතය බලන විට මෙම නිර්මාණය සමඟ ඇති පෙළ නොපෙනෙන ලෙස සකස් කරන්න, පහත දැක්වෙන අදහස් දැක්වීමෙන් හෝ දකුණේ සිට වමට පෙන්වන අක්ෂර අක්ෂර ඇතුළත එකතු කිරීමෙන්, එය සම්පූර්ණයෙන්ම හේතු වනු ඇත. ද්වේෂසහගත ඇතුළත් කිරීම මත විවිධ අක්ෂර අධිස්ථාපනය වේ. එවැනි කේතය අර්ථාන්විතව නිවැරදි ලෙස පවතිනු ඇත, නමුත් වෙනස් ලෙස අර්ථකථනය කර පෙන්වනු ඇත.

සංවර්ධකයාට නොපෙනෙන කේතයට වෙනස්කම් හඳුන්වා දීමට ට්‍රෝජන් මූලාශ්‍ර ප්‍රහාරය

කේතය සමාලෝචනය කරන අතරතුර, සංවර්ධකයෙකු අක්ෂරවල දෘශ්‍ය අනුපිළිවෙලට මුහුණ දෙන අතර නවීන පෙළ සංස්කාරකයක, වෙබ් අතුරු මුහුණතක හෝ IDE තුළ සැක සහිත නොවන අදහසක් දකිනු ඇත, නමුත් සම්පාදකයා සහ පරිවර්තකයා අක්ෂරවල තාර්කික අනුපිළිවෙල භාවිතා කරනු ඇත. අදහස් දැක්වීම්වල ඇති ද්විපාර්ශ්වික පෙළ කෙරෙහි අවධානය යොමු නොකර, අනිෂ්ට ඇතුළත් කිරීම සකසන්න. මෙම ගැටළුව විවිධ ජනප්‍රිය කේත සංස්කාරකවරුන්ට (VS Code, Emacs, Atom) මෙන්ම ගබඩාවල (GitHub, Gitlab, BitBucket සහ සියලුම Atlassian නිෂ්පාදන) කේත බැලීම සඳහා අතුරු මුහුණත් බලපායි.

සංවර්ධකයාට නොපෙනෙන කේතයට වෙනස්කම් හඳුන්වා දීමට ට්‍රෝජන් මූලාශ්‍ර ප්‍රහාරය

ද්වේෂසහගත ක්රියාවන් ක්රියාත්මක කිරීම සඳහා ක්රමවේදය භාවිතා කිරීමට ක්රම කිහිපයක් තිබේ: සැඟවුනු "ආපසු" ප්රකාශනයක් එකතු කිරීම, නියමිත වේලාවට පෙර කාර්යය සම්පූර්ණ කිරීමට හේතු වේ; වලංගු ඉදිකිරීම් ලෙස සාමාන්‍යයෙන් දෘශ්‍යමාන වන ප්‍රකාශන අදහස් දැක්වීම (උදාහරණයක් ලෙස, වැදගත් චෙක්පත් අක්‍රිය කිරීමට); තන්තු වලංගු කිරීමේ අසාර්ථකත්වයට තුඩු දෙන වෙනත් තන්තු අගයන් පැවරීම.

උදාහරණයක් ලෙස, ප්‍රහාරකයෙකු රේඛාව ඇතුළත් වෙනසක් යෝජනා කළ හැක: if access_level != "user{U+202E} {U+2066}// පරිපාලක{U+2069} {U+2066} දැයි පරීක්ෂා කරන්න" {

එය ප්‍රවේශ_ලෙවල් != “පරිශීලක” ලෙස සමාලෝචන අතුරුමුහුණතෙහි පෙන්වනු ඇත {

මීට අමතරව, වෙනත් ප්‍රහාරක ප්‍රභේදයක් යෝජනා කර ඇත (CVE-2021-42694), සමලිංගික භාවිතය හා සම්බන්ධ, පෙනුමෙන් සමාන, නමුත් අර්ථයෙන් වෙනස් වන සහ විවිධ යුනිකෝඩ් කේත ඇති අක්ෂර (උදාහරණයක් ලෙස, "ɑ" අක්ෂරය "ට සමාන වේ" a", "ɡ" - "g", "ɩ" - "l"). සංවර්ධකයින් නොමඟ යැවීමට ශ්‍රිත සහ විචල්‍යවල නම් වලින් සමහර භාෂාවල සමාන අක්ෂර භාවිතා කළ හැක. උදාහරණයක් ලෙස, විවිධ ක්‍රියා සිදු කරන වෙන් කළ නොහැකි නම් සහිත ශ්‍රිත දෙකක් අර්ථ දැක්විය හැක. සවිස්තරාත්මක විශ්ලේෂණයකින් තොරව, මෙම කාර්යයන් දෙකෙන් නිශ්චිත ස්ථානයක හැඳින්වෙන්නේ කුමක්ද යන්න වහාම පැහැදිලි නොවේ.

සංවර්ධකයාට නොපෙනෙන කේතයට වෙනස්කම් හඳුන්වා දීමට ට්‍රෝජන් මූලාශ්‍ර ප්‍රහාරය

ආරක්ෂක පියවරක් ලෙස, යුනිකෝඩ් අක්ෂර සඳහා සහය දක්වන සම්පාදක, පරිවර්තක සහ එකලස් කිරීමේ මෙවලම් ප්‍රතිදානයේ දිශාව වෙනස් කරන අදහස්, තන්තු වචන, හෝ හඳුනාගැනීම්වල යුගල නොකළ පාලන අක්ෂර තිබේ නම් දෝෂයක් හෝ අනතුරු ඇඟවීමක් පෙන්වීම නිර්දේශ කෙරේ (U+202A, U+202B, U +202C, U+202D, U+202E, U+2066, U+2067, U+2068, U+2069, U+061C, U+200E සහ U+200F). එවැනි අක්ෂර ක්‍රමලේඛන භාෂා පිරිවිතරයන්හිදී ද පැහැදිලිවම තහනම් කළ යුතු අතර කේත සංස්කාරක සහ ගබඩා අතුරුමුහුණත් තුළ ගරු කළ යුතුය.

අතිරේක 1: GCC, LLVM/Clang, Rust, Go, Python සහ binutils සඳහා අවදානම් පැච් සකස් කර ඇත. GitHub, Bitbucket සහ Jira ද ගැටලුව විසඳා ඇත. GitLab සඳහා නිවැරදි කිරීමක් සිදු වෙමින් පවතී. ගැටළු සහගත කේතය හඳුනා ගැනීම සඳහා, විධානය භාවිතා කිරීමට යෝජනා කෙරේ: grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202A\u202B\u2066\u2067\u2068\u2069\uXNUMX]/' මූලාශ්රය

අතිරේක 2: Plan 9 OS සහ Go ක්‍රමලේඛන භාෂාවේ සංවර්ධකයින්ගෙන් කෙනෙකු වන Russ Cox, විස්තර කරන ලද ප්‍රහාරක ක්‍රමයට අධික අවධානයක් යොමු කිරීම විවේචනය කළේය, එය දිගු කලක් තිස්සේ දන්නා (Go, Rust, C++, Ruby) සහ බැරෑරුම් ලෙස නොසලකයි. . Cox ට අනුව, ගැටළුව ප්‍රධාන වශයෙන් කේත සංස්කාරකවරුන් සහ වෙබ් අතුරුමුහුණත්වල තොරතුරු නිවැරදිව ප්‍රදර්ශනය කිරීම ගැන සැලකිලිමත් වන අතර, සමාලෝචනයේදී නිවැරදි මෙවලම් සහ කේත විශ්ලේෂක භාවිතා කිරීමෙන් විසඳා ගත හැකිය. එබැවින්, සමපේක්ෂන ප්‍රහාර කෙරෙහි අවධානය යොමු කිරීම වෙනුවට, කේත සහ පරායත්ත සමාලෝචන ක්‍රියාවලීන් වැඩිදියුණු කිරීම කෙරෙහි අවධානය යොමු කිරීම වඩාත් යෝග්‍ය වනු ඇත.

සම්පාදක මට්ටමින් භයානක සංකේත තහනම් කිරීමෙන්, මෙම සංකේත භාවිතය පිළිගත හැකි විශාල මෙවලම් ස්ථරයක් ඉතිරිව ඇති බැවින්, ගැටළු නිරාකරණය කිරීමට සම්පාදකයන් නිවැරදි ස්ථානය නොවන බව Ras Cox විශ්වාස කරයි. පැකේජ කළමනාකරුවන් සහ විවිධ වින්‍යාස විග්‍රහ කරන්නන් සහ දත්ත. උදාහරණයක් ලෙස, රස්ට් ව්‍යාපෘතිය ලබා දී ඇත, එය සම්පාදකයේ LTR/RTL කේතය සැකසීම තහනම් කරන ලදී, නමුත් Cargo.toml ගොනුව හරහා සමාන ප්‍රහාරයකට ඉඩ සලසන Cargo පැකේජ කළමනාකරුට නිවැරදි කිරීමක් එක් නොකළේය. ඒ හා සමානව, BUILD.bazel, CMakefile, Cargo.toml, Dockerfile, GNUmakefile, Makefile, go.mod, package.json, pom.xml සහ requirements.txt වැනි ගොනු ප්‍රහාරවල මූලාශ්‍ර බවට පත්විය හැක.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න