printf - ການປ້ອນຂໍ້ມູນຂອງຜູ້ໃຊ້ python - java printf

printf(user_input) ຍັງເປັນອັນຕະລາຍຢູ່: ຂ້ອຍໄດ້ທຳລາຍ Build ດ້ວຍຮູບແບບແນວໃດ

ຂໍ້ບົກພ່ອງຂອງ 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:

  1. Dev commitລະຫັດ s ກັບ ພິມ f(ຂໍ້ມູນຜູ້ໃຊ້)
  2. ວຽກ CI ດຳເນີນການ, ປະມວນຜົນການປ້ອນຂໍ້ມູນທີ່ຜູ້ໃຊ້ຄວບຄຸມ
  3. ຕົວຈັດຮູບແບບຕີຄວາມໝາຍສະຕຣິງຜິດ → ຜົນຜະລິດຂັດຂ້ອງ ຫຼື ເສຍຫາຍ
  4. ການສ້າງລົ້ມເຫຼວ, ເຮັດໃຫ້ການນຳໃຊ້ຊັກຊ້າ ແລະ ເພີ່ມເວລາໃນການດີບັກ

ນີ້ບໍ່ແມ່ນທິດສະດີ; ພວກເຮົາໄດ້ເຫັນມັນເກີດຂຶ້ນໃນສະພາບແວດລ້ອມທີ່ທັນສະໄໝ.

ບໍ່ພຽງແຕ່ມໍລະດົກເທົ່ານັ້ນ: ເປັນຫຍັງຂໍ້ຜິດພາດກ່ຽວກັບຮູບແບບຍັງຄົງມີຄວາມສຳຄັນໃນທຸກມື້ນີ້

ຂໍ້ຜິດພາດຂອງ 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

ຄຳ ສຸດທ້າຍ: ນີ້ບໍ່ແມ່ນກ່ຽວກັບຄວາມหวาดระแวง; ມັນແມ່ນການກຽມພ້ອມ. ຂໍ້ຜິດພາດກ່ຽວກັບຮູບແບບແມ່ນງ່າຍທີ່ຈະເກີດຂຶ້ນ ແລະ ເປັນອັນຕະລາຍຖ້າມອງຂ້າມ. ໃຫ້ຢຸດພວກມັນກ່ອນທີ່ພວກມັນຈະມາຮອດ.

ເຄື່ອງມືວິເຄາະອົງປະກອບຊອບແວ SCA
ຈັດລຳດັບຄວາມສຳຄັນ, ແກ້ໄຂ ແລະ ຮັກສາຄວາມສ່ຽງດ້ານຊອບແວຂອງທ່ານໃຫ້ປອດໄພ
ຮັບບັນຊີຟຣີຂອງທ່ານ.
ບໍ່ຕ້ອງມີບັດເຄດິດ.

ຮັບປະກັນການພັດທະນາຊອບແວ ແລະ ການຈັດສົ່ງຂອງທ່ານ

ດ້ວຍຊຸດຜະລິດຕະພັນ Xygeni