ຂໍ້ບົກພ່ອງຂອງ Format String ແມ່ນຫຍັງ?
ຂໍ້ຜິດພາດຂອງສະຕຣິງຮູບແບບເກີດຂຶ້ນເມື່ອການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ທີ່ບໍ່ໄດ້ຮັບການກວດສອບຖືກສົ່ງຜ່ານໄປຫາຟັງຊັນການຈັດຮູບແບບເຊັ່ນ printf, System.out.printf, ຫຼື f-strings ແລະ ວິທີການບັນທຶກຂອງ Python. ຟັງຊັນເຫຼົ່ານີ້ຕີຄວາມໝາຍຕົວລະບຸຮູບແບບ (ເຊັ່ນ %s, %x, ແລະອື່ນໆ) ໃນສະຕຣິງ. ຖ້າສະຕຣິງຢູ່ພາຍໃຕ້ການຄວບຄຸມຂອງຜູ້ໃຊ້, ສິ່ງນີ້ສາມາດນໍາໄປສູ່ການຂັດຂ້ອງ ຫຼື ບັນຫາຄວາມປອດໄພ.
ດັ່ງນັ້ນເມື່ອພວກເຮົາເວົ້າ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້), ພວກເຮົາກຳລັງເຕືອນບໍ່ໃຫ້ການຄວບຄຸມການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ທີ່ບໍ່ໜ້າເຊື່ອຖືຕໍ່ຕົວຈັດຮູບແບບທີ່ມີປະສິດທິພາບ.
ການຕັ້ງຄ່າໃນໂລກຕົວຈິງ: printf(user_input) ໃນແອັບ Python
ນັກພັດທະນາໄດ້ເພີ່ມຄຳສັ່ງ debug ທີ່ເບິ່ງຄືວ່າບໍ່ເປັນອັນຕະລາຍໂດຍໃຊ້ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້) ພາຍໃນສະຄຣິບ Python. ນັ້ນ commit ຜ່ານການກວດສອບລະຫັດ ແລະ ຖືກ CI ຮັບເອົາແລ້ວ pipelineໃນລະຫວ່າງການປະຕິບັດ, ຕົວຈັດຮູບແບບໄດ້ພົບກັບການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ດ້ວຍໂທເຄັນທີ່ບໍ່ຄາດຄິດ, ເຊິ່ງເຮັດໃຫ້ຜົນຜະລິດເສຍຫາຍ ແລະ ການສ້າງລົ້ມເຫຼວ.
ບັນທຶກ CI (ບົດຄັດຫຍໍ້):
TypeError: ຮູບແບບທີ່ຄາດຫວັງ ... ໄດ້ຮັບ ... ບໍ່ມີການປ້ອນຂໍ້ມູນທີ່ເປັນອັນຕະລາຍ, ພຽງແຕ່ສົມມຸດຕິຖານການຈັດຮູບແບບທີ່ຜິດພາດ. ເນື່ອງຈາກວ່າ printf ຕີຄວາມໂຄງສ້າງ, pipeline ຫຍໍ້ໃສ່ສິ່ງທີ່ເບິ່ງຄືວ່າເປັນການປ້ອນຂໍ້ມູນປົກກະຕິ.
ກັບດັກໃນສາຍຕາທີ່ເຫັນໄດ້ຊັດເຈນ: ເປັນຫຍັງ printf(user_input) ຍັງເກີດຂຶ້ນໃນປີ 2025
ເຖິງວ່າຈະມີຊ່ອງໂຫວ່ຂອງຮູບແບບສະຕຣິງທີ່ສືບທອດມາຕັ້ງແຕ່ C, ແຕ່ພວກມັນຍັງຄົງເປັນບັນຫາຢູ່ໃນປະຈຸບັນ. ການພັດທະນາທີ່ວ່ອງໄວມັກຈະກ່ຽວຂ້ອງກັບການຄັດລອກຕົວຢ່າງຈາກ Stack Overflow ຫຼືເຄື່ອງມືພາຍໃນ. ສາຍຄ້າຍຄື printf(ຂໍ້ມູນຜູ້ໃຊ້) or ພິມ (f”{user_input}”) ເບິ່ງຄືວ່າບໍ່ເປັນອັນຕະລາຍ, ແຕ່ມັນບໍ່ແມ່ນ.
ເຖິງແມ່ນວ່າທັນສະໄຫມ CVEs ສະແດງຜົນສະທ້ອນໃນໂລກຕົວຈິງ. ເອົາ CVE-2023-21930 ຕົວຢ່າງ: ຊ່ອງໂຫວ່ format string ໃນການຈັດຕັ້ງປະຕິບັດ Java printf ທີ່ໃຊ້ກັນຢ່າງກວ້າງຂວາງເຮັດໃຫ້ຜູ້ໂຈມຕີສາມາດເຮັດໃຫ້ແອັບພລິເຄຊັນຂັດຂ້ອງ ຫຼື ອ່ານໜ່ວຍຄວາມຈຳທີ່ລະອຽດອ່ອນໄດ້. ຫຼື CVE-2023-36052, ສົ່ງຜົນກະທົບຕໍ່ລະບົບການບັນທຶກທີ່ສະຕຣິງຮູບແບບທີ່ຜູ້ໃຊ້ຄວບຄຸມໄດ້ນຳໄປສູ່ຄວາມເສຍຫາຍຂອງບັນທຶກ.
ສິ່ງເຫຼົ່ານີ້ບໍ່ແມ່ນບັນຫາທີ່ກ່ຽວກັບຂອບເຂດ; ພວກມັນສົ່ງຜົນກະທົບຕໍ່ຫໍສະໝຸດ ແລະ ລະບົບທີ່ທັນສະໄໝ ແລະ ໄດ້ຮັບການບຳລຸງຮັກສາຢ່າງຫ້າວຫັນ. ຄຸນສົມບັດພາສາທີ່ທັນສະໄໝເຊັ່ນ: f-strings ແລະ template literals ເຮັດໃຫ້ການຈັດຮູບແບບງ່າຍຂຶ້ນ ແຕ່ຍັງຊ່ອນຄວາມສັບສົນອີກດ້ວຍ. ການໃຊ້ຢ່າງບໍ່ລະມັດລະວັງ, ພວກມັນສາມາດເຮັດໃຫ້ການບໍລິການຂັດຂ້ອງ ຫຼື ເປີດເຜີຍເຫດຜົນ.
ຂໍ້ບົກພ່ອງເຫຼົ່ານີ້ບໍ່ພຽງແຕ່ມີຢູ່ໃນແອັບເກົ່າເທົ່ານັ້ນ. ພວກເຮົາໄດ້ເຫັນພວກມັນຢູ່ໃນສະຄຣິບ CI ແບບໂອເພນຊອສ, ບັນທຶກການເລີ່ມຕົ້ນ, ແລະແມ້ກະທັ້ງເຄື່ອງມືຄວາມປອດໄພທີ່ສ້າງດ້ວຍ stacks ທີ່ທັນສະໄໝເຊັ່ນ Python, Java printf, ແລະ Node.js.
ເສັ້ນທາງລຸ່ມ: ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້) ບໍ່ພຽງແຕ່ແບບທີ່ບໍ່ດີເທົ່ານັ້ນ, ແຕ່ມັນຍັງມີຄວາມສ່ຽງແທ້ໆ.
ການວິພາກຂອງຊ່ອງໂຫວ່: ສິ່ງທີ່ printf(user_input) ເຮັດ
ໃນມູນຄ່າໃບຫນ້າ, ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້) ພຽງແຕ່ພິມສະຕຣິງ. ແຕ່ພາຍໃຕ້ຝາປິດ, ມັນຕີຄວາມມັນເປັນຊຸດຂອງຄຳສັ່ງ.
ໃນທົ່ວ Python, Java, ແລະ Node.js, ຮູບແບບແມ່ນຄືກັນ: ຟັງຊັນ format ວິເຄາະການປ້ອນຂໍ້ມູນສຳລັບໂທເຄັນເຊັ່ນ %s, %x, ຫຼື {}ຖ້າສະຕຣິງປ້ອນຂໍ້ມູນມາຈາກຜູ້ໃຊ້ ແລະ ຍັງບໍ່ທັນໄດ້ຮັບການກວດສອບຄວາມຖືກຕ້ອງ, ໂທເຄັນເຫຼົ່ານັ້ນຈະເຮັດໜ້າທີ່ຄືກັບຄຳສັ່ງ. ສິ່ງນີ້ສາມາດນຳໄປສູ່ການຂັດຂ້ອງ, ບັນທຶກທີ່ເສຍຫາຍ, ຫຼື ບັນຫາຄວາມປອດໄພ.
ຮ້າຍໄປກວ່ານັ້ນ, ຫຼາຍຫ້ອງສະໝຸດ ແລະ wrappers ຈະບໍ່ສະແດງຂັ້ນຕອນການຈັດຮູບແບບ, ດັ່ງນັ້ນຊ່ອງໂຫວ່ດັ່ງກ່າວສາມາດຖືກເຊື່ອງໄວ້ຢ່າງເລິກເຊິ່ງໃນຟັງຊັນ utility ຫຼື ເຄື່ອງມືການບັນທຶກ. ທ່ານອາດຄິດວ່າທ່ານພຽງແຕ່ບັນທຶກຂໍ້ຄວາມ, ແຕ່ໂທເຄັນທີ່ບໍ່ໜ້າເຊື່ອຖືຈາກການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ຫຼື Java printf ສາມາດທຳລາຍແອັບພລິເຄຊັນຂອງທ່ານໄດ້ຢ່າງງຽບໆ.
ເອົາກັບບ້ານ: ຟັງຊັນການຈັດຮູບແບບບໍ່ພຽງແຕ່ກ່ຽວກັບຜົນຜະລິດເທົ່ານັ້ນ; ພວກມັນຍັງຕີຄວາມໂຄງສ້າງ. ຖ້າທ່ານປ່ອຍໃຫ້ຂໍ້ມູນຂອງຜູ້ໃຊ້ກຳນົດໂຄງສ້າງນັ້ນ, ທ່ານມີຄວາມສ່ຽງຕໍ່ຄວາມບໍ່ໝັ້ນຄົງ ແລະ ການປະນີປະນອມ.
ຄວາມສ່ຽງທີ່ແທ້ຈິງໃນ Pipelineຈາກ: ອິນໂນເຊນ Commit ເພື່ອສ້າງການຢຸດເຮັດວຽກ
ມັນເລີ່ມຕົ້ນດ້ວຍສິ່ງນ້ອຍໆ commit: ຄຳສັ່ງບັນທຶກໂດຍໃຊ້ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້).
CI ຮັບການປ່ຽນແປງ, ປະຕິບັດມັນ, ແລະ boom, ບັນທຶກເສຍຫາຍ, ຜົນຜະລິດບໍ່ສອດຄ່ອງ, ການທົດສອບບໍ່ສາມາດອ່ານໄດ້. ພຽງແຕ່ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ທີ່ບໍ່ໄດ້ຮັບການກວດສອບຄັ້ງດຽວພ້ອມດ້ວຍໂທເຄັນການຈັດຮູບແບບກໍພຽງພໍທີ່ຈະຍຸບ pipeline.
CI/CD Flow:
- Dev commitລະຫັດ s ກັບ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້)
- ວຽກ CI ດຳເນີນການ, ປະມວນຜົນການປ້ອນຂໍ້ມູນທີ່ຜູ້ໃຊ້ຄວບຄຸມ
- ຕົວຈັດຮູບແບບຕີຄວາມໝາຍສະຕຣິງຜິດ → ຜົນຜະລິດຂັດຂ້ອງ ຫຼື ເສຍຫາຍ
- ການສ້າງລົ້ມເຫຼວ, ເຮັດໃຫ້ການນຳໃຊ້ຊັກຊ້າ ແລະ ເພີ່ມເວລາໃນການດີບັກ
ນີ້ບໍ່ແມ່ນທິດສະດີ; ພວກເຮົາໄດ້ເຫັນມັນເກີດຂຶ້ນໃນສະພາບແວດລ້ອມທີ່ທັນສະໄໝ.
ບໍ່ພຽງແຕ່ມໍລະດົກເທົ່ານັ້ນ: ເປັນຫຍັງຂໍ້ຜິດພາດກ່ຽວກັບຮູບແບບຍັງຄົງມີຄວາມສຳຄັນໃນທຸກມື້ນີ້
ຂໍ້ຜິດພາດຂອງ format string ບໍ່ແມ່ນຊາກຫັກພັງ; ພວກມັນໄດ້ວິວັດທະນາການໄປແລ້ວ. Python, Java, ແລະ Node.js ລ້ວນແຕ່ຮອງຮັບເຄື່ອງມືການຈັດຮູບແບບທີ່ອຸດົມສົມບູນ. ແລະນິໄສການພັດທະນາທີ່ທັນສະໄໝມັກຈະໝາຍຄວາມວ່າການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ບໍ່ໄດ້ຖືກກວດສອບເຂົ້າໄປໃນເຄື່ອງມືເຫຼົ່ານີ້.
ເປັນຫຍັງມັນຍັງເກີດຂຶ້ນ ຄວາມໄວ. ສະຕິປັນຍາ. ນັກພັດທະນາລຸ້ນໃໝ່ອາດຈະຂຽນ ພິມ (f”{user_input}”) ໂດຍບໍ່ຄິດ. ຄືກັນກັບ System.out.printf(ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້) ໃນເກາະຊາວາ.
CVEs ຍັງສືບຕໍ່ມາ. ຄຳແນະນຳດ້ານຄວາມປອດໄພທີ່ຜ່ານມາເນັ້ນໃຫ້ເຫັນບັນຫາສະຕຣິງຮູບແບບໃນລະບົບນິເວດທີ່ທັນສະໄໝ. ຄວາມສ່ຽງຕ່າງໆເຊັ່ນ CVE-2023-21930 (Java printf) ແລະ CVE-2023-36052 (ກອບການບັນທຶກ) ສະແດງໃຫ້ເຫັນວ່າສະຕຣິງຮູບແບບທີ່ບໍ່ໄດ້ຮັບການກວດສອບໃນສະພາບແວດລ້ອມທີ່ທັນສະໄໝຍັງສາມາດນຳໄປສູ່ການຂັດຂ້ອງ ຫຼື ການຮົ່ວໄຫຼຂອງຂໍ້ມູນໄດ້ແນວໃດ.
CI/CD ຄົນດຽວບໍ່ພຽງພໍ. CI ມັກຈະກວດສອບກົດ syntax ແລະ lint, ແຕ່ບໍ່ແມ່ນການໃຊ້ສະຕຣິງຮູບແບບທີ່ບໍ່ປອດໄພ. ນັ້ນເຮັດໃຫ້ມີຊ່ອງຫວ່າງທີ່ສຳຄັນ.
ການກວດພົບລະເບີດຝັງດິນ: ການກວດຫາບັນຫາສະຕຣິງຮູບແບບທີ່ທັນສະໄໝ
ຂໍ້ບົກພ່ອງເຫຼົ່ານີ້ຂຽນງ່າຍ ແລະ ກວດພົບໄດ້ຍາກ.
IDE ຂອງເຈົ້າອາດຈະບໍ່ຊ່ວຍເຈົ້າໄດ້: VS Code, PyCharm, IntelliJ, ໃນຂະນະທີ່ດີຫຼາຍສຳລັບຄວາມຜິດພາດຫຼາຍຢ່າງ, ແຕ່ພວກມັນມັກຈະບໍ່ຕິດຕາມການໄຫຼຂອງຂໍ້ມູນລະຫວ່າງແຫຼ່ງຂໍ້ມູນເຂົ້າ ແລະ ຟັງຊັນຮູບແບບ. printf(user_input) ຫຼື System.out.printf(ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້) ເຂົ້າໄປໃນລະຫັດຂອງເຈົ້າຈະບໍ່ເຮັດໃຫ້ເກີດການແຈ້ງເຕືອນ, ເພາະວ່າ IDE ສົມມຸດວ່າເຈົ້າຄວບຄຸມສະຕຣິງທີ່ກຳລັງຈັດຮູບແບບ.
Linters ບໍ່ຈັບມັນໄດ້ເຊັ່ນກັນ. ໂປຣແກຣມ linters ທີ່ນິຍົມເຊັ່ນ flake8, pylint, ຫຼື eslint ຈະສຸມໃສ່ syntax, styling, ແລະ bugs ທົ່ວໄປ. ເວັ້ນເສຍແຕ່ວ່າຈະມີການຕັ້ງຄ່າໂດຍສະເພາະ, ພວກເຂົາຈະບໍ່ເຂົ້າໃຈວ່າ user_input ອາດຈະມາຈາກແຫຼ່ງພາຍນອກ ຫຼື ແຫຼ່ງທີ່ບໍ່ໜ້າເຊື່ອຖື. ການກະທຳ GitHub ທີ່ກຳລັງເຮັດວຽກ standard ກົດລະບຽບຂອງ lint ອາດຈະໃຫ້ເຄື່ອງໝາຍຖືກສີຂຽວແກ່ເຈົ້າ, ເຖິງແມ່ນວ່າເຈົ້າໄດ້ແນະນຳສະຕຣິງຮູບແບບທີ່ເປັນອັນຕະລາຍກໍຕາມ.
ບ່ອນທີ່ SAST ເຂົ້າມາ: ການທົດສອບຄວາມປອດໄພຂອງແອັບພລິເຄຊັນແບບຄົງທີ່ (SAST) ເໝາະສົມກັບບັນຫານີ້ໂດຍສະເພາະ ເພາະມັນຕິດຕາມການໄຫຼຂອງຂໍ້ມູນຜ່ານຖານຂໍ້ມູນຂອງທ່ານ. ດີ SAST ເຄື່ອງມື ສາມາດ:
- ຕິດຕາມຂໍ້ມູນຈາກແຫຼ່ງທີ່ບໍ່ໜ້າເຊື່ອຖື (ເຊັ່ນ: ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python, ຕົວແປສະພາບແວດລ້ອມ, ອາກິວເມັນ CLI)
- ລະບຸເວລາທີ່ຂໍ້ມູນນັ້ນໄຫຼເຂົ້າໄປໃນບ່ອນເກັບຂໍ້ມູນທີ່ລະອຽດອ່ອນເຊັ່ນ: ຟັງຊັນການຈັດຮູບແບບ (printf, System.out.printf, f-strings)
- ລາຍງານເສັ້ນທາງທີ່ບໍ່ປອດໄພ ແລະ ສ້າງການແຈ້ງເຕືອນທີ່ສາມາດປະຕິບັດໄດ້, ເຖິງແມ່ນວ່າສາຍທີ່ມີຄວາມສ່ຽງຈະຖືກຝັງຢູ່ພາຍໃນວິທີການຊ່ວຍເຫຼືອ ຫຼື ຄລາສ wrapper ກໍຕາມ.
- ຮອງຮັບກົດລະບຽບ ຫຼື ນະໂຍບາຍທີ່ກຳນົດເອງເພື່ອບລັອກ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້)ຮູບແບບທີ່ຄ້າຍຄືກັບຂະໜາດ
SAST ຊ່ວຍຍ້າຍໄປທາງຊ້າຍ: ມັນຈັບຂໍ້ບົກພ່ອງຂອງຮູບແບບໃນລະຫວ່າງການພັດທະນາ ຫຼື CI ກ່ອນທີ່ພວກມັນຈະສາມາດເຮັດໃຫ້ເກີດບັນຫາໃນເວລາແລ່ນ ຫຼື ເຫດການດ້ານຄວາມປອດໄພ.
TL; DR: Guardrails > ການທົບທວນຄືນດ້ວຍຕົນເອງ ທີມງານທີ່ມີການເຄື່ອນໄຫວໄວຕ້ອງການ SAST ເພື່ອເຮັດໜ້າທີ່ເປັນຕາໜ່າງຄວາມປອດໄພ, ເຊິ່ງເຂົ້າໃຈສະພາບການ, ຕິດຕາມກະແສຂໍ້ມູນປ້ອນເຂົ້າ, ແລະ ບລັອກການຈັດຮູບແບບທີ່ເປັນອັນຕະລາຍກ່ອນການລວມເຂົ້າກັນ.
Guardrails ວຽກງານນັ້ນ: ການປ້ອງກັນຄວາມລົ້ມເຫຼວທີ່ຂັບເຄື່ອນດ້ວຍຮູບແບບ
ເລີ່ມຕົ້ນດ້ວຍການກວດສອບຄົງທີ່ໃນ CI ໃຊ້ເຄື່ອງມືທີ່:
- ວິເຄາະກະແສຂໍ້ມູນຈາກການປ້ອນຂໍ້ມູນໄປຫາຕົວຈັດຮູບແບບ
- ການລວມບລັອກໃນສິ່ງທີ່ບໍ່ປອດໄພ printf ການນໍາໃຊ້
- ຕື່ມ pre-commit hooks ສຳລັບຮູບແບບສະຕຣິງ
ຢຸດໃຊ້ດິບ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້) ໃຊ້ຮູບແບບທີ່ປອດໄພກວ່າ:
ໃນ Python
ໃນ Java
ສະຫຼຸບເຫດຜົນການຈັດຮູບແບບຂອງທ່ານ: ສ້າງ wrapper ພາຍໃນທີ່:
- ປະຕິເສດສະຕຣິງຮູບແບບທີ່ບໍ່ໜ້າເຊື່ອຖື
- ບັນທຶກດ້ວຍແມ່ແບບ
- ສາມາດທົດສອບ ແລະ ກວດສອບໄດ້
ຢ່າອີງໃສ່ວັດທະນະທໍາ, ເຮັດໃຫ້ມັນເປັນອັດຕະໂນມັດ. ຝຶກອົບຮົມທີມງານຂອງທ່ານ, ແຕ່ສະໜັບສະໜູນມັນດ້ວຍການບັງຄັບໃຊ້ CI ແລະ SAST.
DevSecOps ໃນການປະຕິບັດ: ວິທີທີ່ Xygeni ຢຸດການຈັດຮູບແບບຂໍ້ຜິດພາດກ່ອນທີ່ພວກມັນຈະນຳໃຊ້
ຂໍ້ຜິດພາດກ່ຽວກັບຮູບແບບຖືກພົບເຫັນຢູ່ບ່ອນທີ່ມັນສຳຄັນ: ໃນ CI, ຊີເກນີ ສະແກນບ່ອນເກັບມ້ຽນຂໍ້ມູນຢ່າງຫ້າວຫັນເພື່ອຫາຮູບແບບການຈັດຮູບແບບທີ່ເປັນອັນຕະລາຍເຊັ່ນ:
- ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້) ໃນ Python
- System.out.printf(ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້) ໃນ Java
ສິ່ງເຫຼົ່ານີ້ຖືກໝາຍວ່າມີຄວາມສ່ຽງສູງ ເພາະວ່າພວກມັນອະນຸຍາດໃຫ້ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ແລະການໃຊ້ Java printf ໃນທາງທີ່ຜິດ ກຳນົດພຶດຕິກຳໃນເຄື່ອງຈັກຈັດຮູບແບບ.
ການບລັອກແບບເວລາຈິງໃນທົ່ວຜູ້ໃຫ້ບໍລິການ CI. ເມື່ອປະສົມປະສານກັບ GitHub Actions, GitLab CI/CD, Bitbucket Pipelines, ຫຼື Jenkins, Xygeni ຢຸດການລວມກ່ອນທີ່ລະຫັດຈະສາມາດເຜີຍແຜ່ໄດ້. ນັກພັດທະນາໄດ້ຮັບການແຈ້ງເຕືອນທັນທີ, ຕາມສະພາບການທີ່ສະແດງໃຫ້ເຫັນ:
- ໄຟລ໌ ແລະ ແຖວທີ່ແນ່ນອນບ່ອນທີ່ຊ່ອງໂຫວ່ປະກົດຂຶ້ນ
- ຄຳອະທິບາຍທີ່ຊັດເຈນກ່ຽວກັບບັນຫາ (ຕົວຢ່າງ, “ຂໍ້ມູນເຂົ້າທີ່ບໍ່ໄດ້ຮັບການກວດສອບໃນຮູບແບບສະຕຣິງ”)
- ການກະທຳທີ່ແນະນຳເພື່ອແກ້ໄຂມັນ
ການບລັອກໃນຕອນຕົ້ນນີ້ປ່ຽນ Xygeni ຈາກເຄື່ອງມືລາຍງານໃຫ້ກາຍເປັນຜູ້ຄວບຄຸມປະຕູການລວມຂໍ້ມູນ. ແທນທີ່ຈະມີການແຈ້ງເຕືອນຫຼັງການເສຍຊີວິດ ຫຼື ການຄົ້ນພົບທີ່ບໍ່ຈະແຈ້ງ, ທ່ານຈະໄດ້ຮັບກົດລະບຽບຄວາມປອດໄພທີ່ສາມາດບັງຄັບໃຊ້ໄດ້ໃນເວລາທີ່ມັນມີຄວາມສຳຄັນທີ່ສຸດ.
ການສະແກນແບບຮັບຮູ້ສະພາບການ: ບໍ່ເຫມືອນກັບການຄົ້ນຫາຄໍາສໍາຄັນ, Xygeni ວິເຄາະການໄຫຼຂອງຂໍ້ມູນເພື່ອເຂົ້າໃຈວ່າສະຕຣິງຮູບແບບມາຈາກການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ Python ຫຼືບໍ່. ມັນສາມາດແຍກແຍະລະຫວ່າງສະຕຣິງພາຍໃນທີ່ປອດໄພ ແລະ ສະຕຣິງທີ່ມີຂໍ້ມູນພາຍນອກ.
ເປັນຫຍັງເລື່ອງນີ້: ນັກພັດທະນາບໍ່ຕ້ອງການສຽງດັງເພີ່ມເຕີມ. ພວກເຂົາຕ້ອງການເຄື່ອງມືທີ່ສະຫຼາດ ແລະ ສາມາດນຳໃຊ້ໄດ້. Xygeni ສະເໜີໃຫ້ມີການcisການກວດຈັບ ແລະ ບັງຄັບໃຊ້ແບບເວລາຈິງ guardrails ບ່ອນທີ່ເຂົາເຈົ້ານັບ, ໃນ CI ຂອງທ່ານ pipeline. ກວດເບິ່ງມັນ!
TL;DR – ແມງໄມ້ນ້ອຍ, ຄວາມວຸ້ນວາຍໃຫຍ່: ຢ່າເຮັດ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້)
ແຖວນີ້ສາມາດ:
- ຢຸດ CI
- ບັນທຶກທີ່ເສຍຫາຍ
- ເຮັດໃຫ້ເກີດຂໍ້ຍົກເວັ້ນໃນເວລາແລ່ນ
ແລະມັນຍັງສະແດງຢູ່ໃນປີ 2025.
ຄວາມສ່ຽງທີ່ແທ້ຈິງ
| ຄວາມສ່ຽງຕໍ່ການ | ເປັນຫຍັງມັນເກີດຂຶ້ນ | ວິທີແກ້ໄຂມັນ |
|---|---|---|
| CI ສ້າງ ແລະ ບັນທຶກແຕກ | ໂທເຄັນຮູບແບບລົບກວນຜົນຜະລິດ | ຫຼີກເວັ້ນໂດຍກົງ printf(user_input) |
| ການວາງຊ້ອນກັນທີ່ທັນສະໄໝຍັງມີຄວາມສ່ຽງຢູ່ | ການເອີ້ນຮູບແບບທີ່ບໍ່ຖືກຕ້ອງໃນ Java/Python | ເຮັດຄວາມສະອາດຂໍ້ມູນປ້ອນຂໍ້ມູນ ຫຼື ໃຊ້ API ທີ່ປອດໄພກວ່າ |
| IDE ແລະ linters ພາດມັນ | ພວກເຂົາບໍ່ໄດ້ຕິດຕາມການໄຫຼຂອງຂໍ້ມູນ | ການນໍາໃຊ້ SAST ເຄື່ອງມື |
| ລະຫັດອັນຕະລາຍຖືກລວມເຂົ້າກັນ | ການທົບທວນຄືນອາດຈະພາດຂໍ້ບົກຜ່ອງຂອງຮູບແບບ | ໃຊ້ເຄື່ອງມືເຊັ່ນ Xygeni ໃນ CI |
ລາຍການກວດສອບນັກພັດທະນາ
- ຢ່າສົ່ງຂໍ້ມູນຂອງຜູ້ໃຊ້ໂດຍກົງໃສ່ສະຕຣິງຮູບແບບ
- ເຮັດຄວາມສະອາດ ຫຼື ຫຼີກລ່ຽງການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້
- ໃຊ້ວິທີທີ່ປອດໄພ:
- python: logging.info(“%s”, user_input)
- Java: ຮູບແບບຂໍ້ຄວາມ.ຮູບແບບ()
- ການນໍາໃຊ້ SAST ເຄື່ອງມືທີ່ເຂົ້າໃຈກະແສການປ້ອນຂໍ້ມູນ
- ບັງຄັບໃຊ້ guardrails ໃນ CI
ຄຳ ສຸດທ້າຍ: ນີ້ບໍ່ແມ່ນກ່ຽວກັບຄວາມหวาดระแวง; ມັນແມ່ນການກຽມພ້ອມ. ຂໍ້ຜິດພາດກ່ຽວກັບຮູບແບບແມ່ນງ່າຍທີ່ຈະເກີດຂຶ້ນ ແລະ ເປັນອັນຕະລາຍຖ້າມອງຂ້າມ. ໃຫ້ຢຸດພວກມັນກ່ອນທີ່ພວກມັນຈະມາຮອດ.





