ยินดีต้อนรับสู่บ้านสาธารณะของ Dependabot
Dependabot-Core เป็นไลบรารีที่เป็นหัวใจสำคัญของการอัปเดตความปลอดภัย/เวอร์ชันของ Dependabot
ใช้เพื่อสร้างคำขอดึงอัตโนมัติที่อัปเดตการขึ้นต่อกันสำหรับโปรเจ็กต์ที่เขียนด้วย Ruby, JavaScript, Python, PHP, Dart, Elixir, Elm, Go, Rust, Java และ .NET นอกจากนี้ยังสามารถอัปเดตโมดูลย่อย git, ไฟล์ Docker และไฟล์ Terraform ได้อีกด้วย คุณสมบัติได้แก่:
คนส่วนใหญ่คุ้นเคยกับบริการ Dependabot ที่ทำงานบน GitHub.com และ GitHub Enterprise การเปิดใช้งานนั้นง่ายพอ ๆ กับการตรวจสอบไฟล์การกำหนดค่า dependabot.yml
ในไดเร็กทอรี .github
ของที่เก็บของคุณ
อย่างไรก็ตาม หากคุณต้องการใช้งาน Dependabot เวอร์ชันที่กำหนดเองหรือใช้งานบนแพลตฟอร์มอื่น คุณจะไม่ตกอยู่ในสถานการณ์ลำบาก Repo นี้จัดเตรียมตรรกะที่จำเป็นสำหรับการโฮสต์ Dependabot แบบสแตนด์อโลนของคุณเอง ปัจจุบันรองรับการเปิด Pull Requests กับพื้นที่เก็บข้อมูลที่โฮสต์บน GitHub, Github Enterprise, Azure DevOps, GitLab, BitBucket และ AWS CodeCommit
Dependabot-Core เป็นไลบรารี ดังนั้นคุณจะต้องมีสคริปต์จุดเข้าใช้งานบางประเภท ต่อไปนี้เป็นตัวอย่างบางส่วนที่จะช่วยคุณในการเริ่มต้น
หมายเหตุ: หากคุณต้องการรัน Dependabot ภายในเครื่องเพื่อวัตถุประสงค์ในการพัฒนา/แก้ไขจุดบกพร่อง โปรดดูคู่มือการพัฒนา
repo dependabot-script จัดเตรียมคอลเลกชันของสคริปต์ตัวอย่างสำหรับการกำหนดค่าไลบรารี Dependabot-Core มีจุดมุ่งหมายเพื่อเป็นจุดเริ่มต้นสำหรับผู้ใช้ขั้นสูงในการรัน Dependabot เวอร์ชันที่โฮสต์เองภายในโปรเจ็กต์ของตนเอง
หมายเหตุ: เมื่อเร็วๆ นี้เราได้ปรับโครงสร้างอิมเมจ Docker แบบเสาหินที่ใช้ภายในไลบรารี Dependabot Core ให้เป็นหนึ่งอิมเมจต่อระบบนิเวศ น่าเสียดายที่นั่นทำให้สคริปต์ dependabot พัง และเรายังไม่มีเวลาอัปเดตเลย เราทราบถึงปัญหาแล้วและหวังว่าจะสามารถแก้ไขปัญหาได้ในเร็วๆ นี้
Dependabot CLI เป็นเครื่องมือรุ่นใหม่ที่อาจแทนที่ dependabot-script
สำหรับกรณีการใช้งานแบบสแตนด์อโลนในที่สุด แม้ว่าจะสร้างความแตกต่างในการขึ้นต่อกัน แต่ในปัจจุบันยังไม่มีตรรกะในการเปลี่ยนความแตกต่างเหล่านั้นให้กลายเป็น PR จริง อย่างไรก็ตาม อาจมีประโยชน์สำหรับผู้ใช้ขั้นสูงที่กำลังมองหาตัวอย่างวิธีแฮ็กบน Dependabot
ในสภาพแวดล้อม เช่น GitHub ที่ Dependabot กำลังทำงานอยู่ในคอนเทนเนอร์ หากคุณต้องการเปลี่ยนกระบวนการสร้างหรือการติดตั้ง ขึ้นอยู่กับว่า Dependabot กำลังตรวจสอบอยู่หรือไม่ คุณสามารถตรวจสอบได้โดยการมีอยู่ของตัวแปรสภาพแวดล้อม DEPENDABOT
ต้องการแสดงความคิดเห็นเกี่ยวกับ Dependabot ให้เราหรือมีส่วนร่วมหรือไม่ เยี่ยมมาก - ขอบคุณมาก!
รายงานข้อบกพร่องส่วนใหญ่ควรมีลิงก์ไปยังพื้นที่เก็บข้อมูลสาธารณะที่ทำให้เกิดปัญหาตามมาด้วย รายงานข้อผิดพลาดที่ไม่สามารถทำซ้ำบน repo สาธารณะโดยใช้เครื่องมือ CLI หรือสคริปต์ dry-run อาจถูกปิดเนื่องจาก "ไม่สามารถทำซ้ำได้"
เครื่องมือติดตามปัญหาของเราค่อนข้างใช้งานอยู่ และด้วยเหตุนี้จึงมีโอกาสที่ดีที่จะมีคนยื่นเรื่องเดียวกันนี้แล้ว หากเป็นเช่นนั้น โปรดโหวตประเด็นนั้น เนื่องจากเราใช้ ? ปฏิกิริยาต่อปัญหาเป็นสัญญาณเดียวในการวัดผลกระทบของคำขอคุณสมบัติหรือข้อบกพร่อง
อย่างไรก็ตาม โปรดอย่าแสดงความคิดเห็นที่ไม่มีส่วนทำให้เกิดการสนทนาใหม่ สำหรับรายละเอียด โปรดดู https://github.com/golang/go/wiki/NoPlusOne นี่คือโอเพ่นซอร์ส หากคุณพบเห็นสิ่งที่คุณต้องการแก้ไข เรายินดีที่จะฝึกสอนคุณผ่านการมีส่วนร่วมในการดึงคำขอเพื่อแก้ไข
ตัวติดตามปัญหามีไว้สำหรับปัญหาที่เกี่ยวข้องกับตรรกะการอัปเดตของ Dependabot เท่านั้น ปัญหาเกี่ยวกับการแจ้งเตือนด้านความปลอดภัยหรือกราฟการพึ่งพาควรถูกยื่นเป็นการอภิปรายเรื่องความปลอดภัยของโค้ดแทน
หลักการทั่วไปที่ดีคือ หากคุณมีคำถามเกี่ยวกับ ความแตกต่าง ในการประชาสัมพันธ์ คำถามนั้นควรอยู่ที่นี่
หากคุณเชื่อว่าคุณพบช่องโหว่ด้านความปลอดภัยใน Dependabot โปรดตรวจสอบนโยบายความปลอดภัยของเราสำหรับรายละเอียดเกี่ยวกับการเปิดเผยสิ่งเหล่านั้นในโปรแกรม GitHub Bug Bounty เพื่อให้เราสามารถดำเนินการแก้ไขปัญหาก่อนที่จะเปิดเผยต่อสาธารณะ
ต้องการมีส่วนร่วมใน Dependabot หรือไม่? เยี่ยมมาก - ขอบคุณมาก!
ขั้นตอนการบริจาค:
โปรดดูหลักเกณฑ์การมีส่วนร่วมสำหรับข้อมูลเพิ่มเติม
หากคุณสนใจที่จะสนับสนุนระบบนิเวศใหม่ โปรดดูข้อมูลเพิ่มเติมในหลักเกณฑ์การสนับสนุน
ขั้นตอนแรกในการแก้ไขข้อบกพร่องหรือเขียนคุณลักษณะใหม่คือการทำให้สภาพแวดล้อมการพัฒนาดำเนินต่อไป เราจัดเตรียมเชลล์สำหรับนักพัฒนาที่ใช้ Docker แบบกำหนดเองซึ่งจะอบในการขึ้นต่อกันที่จำเป็นทั้งหมด ในกรณีส่วนใหญ่ นี่เป็นวิธีที่ดีที่สุดในการทำงานกับโครงการ
เชลล์นักพัฒนาใช้การเมาท์โวลุ่มเพื่อรวมการเปลี่ยนแปลงในเครื่องของคุณกับซอร์สโค้ดของ Dependabot วิธีนี้ทำให้คุณสามารถแก้ไขภายในเครื่องโดยใช้โปรแกรมแก้ไขที่คุณชื่นชอบ และการเปลี่ยนแปลงจะมีผลทันทีภายในคอนเทนเนอร์นักเทียบท่าสำหรับการดำเนินการทดลองรันหรือดำเนินการทดสอบ หมายเหตุ: ดูคำเตือนเกี่ยวกับการแก้ไขสคริปต์ตัวช่วยตัวจัดการแพ็คเกจดั้งเดิม
สคริปต์สำหรับเปิดใช้เชลล์นักพัฒนาจะสร้างอิมเมจนักเทียบท่าตั้งแต่เริ่มต้นหากไม่พบในเครื่อง การดำเนินการนี้อาจใช้เวลาสักครู่
ข้ามการรอคอยด้วยการดึงอิมเมจที่สร้างไว้ล่วงหน้าสำหรับระบบนิเวศที่คุณต้องการดำเนินการ ชื่อรูปภาพใช้ชื่อระบบนิเวศ YAML เพื่อระบุระบบนิเวศ ตัวอย่างเช่น สำหรับ Go Modules ชื่อ YAML คือ gomod
:
$ docker pull ghcr.io/dependabot/dependabot-updater-gomod
หมายเหตุ: ขณะนี้อิมเมจที่สร้างไว้ล่วงหน้าพร้อมใช้งานสำหรับสถาปัตยกรรม AMD64 / Intel เท่านั้น พวกมัน จะ ทำงานบน ARM แต่ช้ากว่า 2x-3x หากคุณสร้างอิมเมจเฉพาะ ARM ด้วยตนเอง
จากนั้น เรียกใช้เชลล์นักพัฒนา โดยระบุระบบนิเวศที่ต้องการ โดยใช้ชื่อไดเรกทอรีระดับบนสุดของระบบนิเวศในโปรเจ็กต์นี้ ตัวอย่างเช่น สำหรับ Go Modules ไดเร็กทอรีระดับบนสุดจะชื่อ go_modules
:
$ bin/docker-dev-shell go_modules
= > running docker development shell
[dependabot-core-dev] ~ $ cd go_modules && rspec spec # to run tests for a particular package
โดยปกติแล้ว Quickstart คือสิ่งที่คุณต้องการ แต่บางครั้งคุณจะต้องสร้างรูปภาพที่อยู่ด้านล่างขึ้นมาใหม่
ตัวอย่างเช่น แม้ว่าเรายังไม่ได้เผยแพร่รูปภาพเฉพาะ ARM แต่ถ้าคุณ กำลัง ทำงานบนแพลตฟอร์มที่ใช้ ARM เราขอแนะนำให้สร้างรูปภาพด้วยตนเอง เนื่องจากคอนเทนเนอร์ที่ได้จะทำงานเร็วกว่ามาก
เชลล์นักพัฒนาทำงานภายในอิมเมจนักเทียบท่า Dependabot Development ซึ่งสร้างขึ้นจากอิมเมจระบบนิเวศ
ผังงาน LR
A["สคริปต์นักเทียบท่า-dev-shell"] -> B ("อิมเมจนักเทียบท่าการพัฒนา Dependabot")
B -> C ("อิมเมจนักเทียบท่าระบบนิเวศ Dependabot Updater (เฉพาะระบบนิเวศ)")
C -> D ("อิมเมจนักเทียบท่า Dependabot Updater Core")
การเปลี่ยนแปลงไฟล์นักเทียบท่าสำหรับอิมเมจใดๆ เหล่านี้จำเป็นต้องสร้างอิมเมจตั้งแต่หนึ่งอิมเมจในเครื่องเพื่อที่จะสะท้อนให้เห็นในเชลล์การพัฒนา
วิธีง่ายๆ แต่ช้าคือการลบอิมเมจที่มีอยู่แล้วรัน bin/docker-dev-shell
ซึ่งจะสร้างอิมเมจที่หายไปโดยอัตโนมัติ
วิธีที่เร็วกว่าคือการดึงอิมเมจที่สร้างไว้ล่วงหน้าทั้งหมดที่ขึ้นอยู่กับอิมเมจที่คุณต้องการสร้างจริง วิธี (ใหม่) สร้างอันเฉพาะ:
อิมเมจหลักของ Updater:
$ docker pull ghcr.io/dependabot/dependabot-updater-core # OR
$ docker build -f Dockerfile.updater-core . # recommended on ARM
อิมเมจระบบนิเวศของ Updater:
$ docker pull ghcr.io/dependabot/dependabot-updater-gomod # OR
$ script/build go_modules # recommended on ARM
คอนเทนเนอร์การพัฒนาโดยใช้แฟล็ก --rebuild
:
$ bin/docker-dev-shell go_modules --rebuild
แพ็คเกจ Dependabot หลายแพ็คเกจใช้ประโยชน์จาก 'ตัวช่วยดั้งเดิม' ซึ่งเป็นไฟล์ปฏิบัติการขนาดเล็กในภาษาโฮสต์
การเปลี่ยนแปลงไฟล์เหล่านี้จะไม่สะท้อนให้เห็นโดยอัตโนมัติภายในคอนเทนเนอร์การพัฒนา
เมื่อคุณทำการแก้ไขไฟล์ตัวช่วยแล้ว ให้รันสคริปต์บิลด์ที่เหมาะสมเพื่ออัปเดตเวอร์ชันที่ติดตั้งด้วยการเปลี่ยนแปลงของคุณดังนี้:
$ bin/docker-dev-shell bundler
= > running docker development shell
$ bundler/helpers/v2/build
$ bin/dry-run.rb bundler dependabot/demo --dir= " /ruby "
หากต้องการดูบันทึกและ stdout จากตัวช่วยจัดการแพ็คเกจดั้งเดิม โปรดดูการดีบักตัวช่วยดั้งเดิม
ขั้นตอนแรกในการแก้ไขจุดบกพร่องคือการทำให้สภาพแวดล้อมการพัฒนาทำงาน
ภายในสภาพแวดล้อมการพัฒนา คุณมีสองตัวเลือกในการจำลองงานการอัปเดตการขึ้นต่อกัน: คุณสามารถใช้เครื่องมือ CLI ที่พัฒนาขึ้นใหม่หรือสคริปต์ Dry-run ดั้งเดิมได้
Dependabot CLI เป็นเครื่องมือที่พัฒนาขึ้นใหม่ซึ่งรวม GitHub Credentials Proxy เพื่อจำลองสิ่งที่เกิดขึ้นภายในบริการ Dependabot-at-GitHub อย่างสมจริงมากขึ้น เมื่อพูดคุยกับสำนักทะเบียนเอกชน
มีคู่มือการแก้ไขจุดบกพร่องโดยเฉพาะ รวมถึงการรองรับการวางลงในโปรแกรมดีบักเกอร์ Ruby
หมายเหตุ: ก่อนที่จะเรียกใช้สคริปต์การทดลองใช้งาน คุณจะต้องทำให้สภาพแวดล้อมการพัฒนาทำงานก่อน
คุณสามารถใช้สคริปต์ bin/dry-run.rb
เพื่อจำลองงานการอัปเดตการขึ้นต่อกัน โดยพิมพ์ส่วนต่างที่จะสร้างไปยังเทอร์มินัล ต้องใช้ข้อโต้แย้งสองตำแหน่ง: ตัวจัดการแพ็คเกจและชื่อ repo GitHub (รวมถึงบัญชี):
$ bin/docker-dev-shell go_modules
= > running docker development shell
$ bin/dry-run.rb go_modules rsc/quote
= > fetching dependency files
= > parsing dependency files
= > updating 2 dependencies
...
สคริปต์ Dry-Run รองรับตัวเลือกอื่นๆ มากมาย ซึ่งทั้งหมดได้รับการบันทึกไว้ที่ด้านบนของซอร์สโค้ดของสคริปต์ ตัวอย่างเช่น:
LOCAL_GITHUB_ACCESS_TOKEN="fake-GitHub-PAT"
อนุญาตให้ระบุ GitHub Personal Access Token (PAT) เพื่อหลีกเลี่ยงการจำกัดอัตรา--dir="path/to/subdir/containing/manifest
เป็นสิ่งจำเป็นหากไฟล์รายการอยู่ในไดเร็กทอรีย่อย--dep="dep-name-that-I-want-to-test"
อนุญาตให้ระบุ dep เดียวเพื่อพยายามอัปเดต ส่วนอื่นๆ ทั้งหมดจะถูกละเว้น--cache=files
อนุญาตให้แคชไฟล์ dep ระยะไกลในเครื่องเพื่อการรันซ้ำที่เร็วขึ้นเมื่อทดสอบการเปลี่ยนแปลงลอจิกในเครื่อง--updater-options=feature_flag_name
อนุญาตให้ส่งผ่านแฟล็กคุณลักษณะนี่คือตัวอย่างของวิธีการรวมสิ่งเหล่านี้เข้าด้วยกัน
LOCAL_GITHUB_ACCESS_TOKEN=github_pat_123_fake_string
bin/dry-run.rb docker jeffwidman/secrets-store-driver
--dir " /manifest_staging/charts/secrets-store-provider "
--cache=files
--dep= " secrets-store "
--updater-options=kubernetes_updates
คุณสามารถเพิ่มคำสั่ง debugger
ได้ทุกที่ในโค้ด Ruby เช่น:
def latest_resolvable_version
debugger
latest_version_finder . latest_version
end
เมื่อคุณรันงาน โปรแกรมดีบักเกอร์ Ruby จะเปิดขึ้น มันควรมีลักษณะดังนี้:
[ 11 , 20 ] in ~/ go_modules / lib / dependabot / go_modules / update_checker . rb
11 | module GoModules
12 | class UpdateChecker < Dependabot :: UpdateCheckers :: Base
13 | require_relative "update_checker/latest_version_finder"
14 |
15 | def latest_resolvable_version
=> 16 | debugger
17 | latest_version_finder . latest_version
18 | end
19 |
20 | # This is currently used to short-circuit latest_resolvable_version,
=> #0 Dependabot::GoModules::UpdateChecker#latest_resolvable_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:16
#1 Dependabot::GoModules::UpdateChecker#latest_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:24
# and 9 frames (use `bt' command for all frames)
( rdbg )
เมื่อพร้อมท์นี้ คุณสามารถเรียกใช้คำสั่งดีบักเกอร์เพื่อนำทาง หรือป้อนวิธีการและตัวแปรเพื่อดูว่ามีอะไรบ้าง ลองป้อนการ dependency
เพื่อดูว่าการขึ้นต่อกันใดที่ Dependabot กำลังทำงานอยู่
หมายเหตุ ขณะที่อยู่ในดีบักเกอร์ การเปลี่ยนแปลงที่ทำกับซอร์สโค้ดจะไม่ถูกรับ คุณจะต้องสิ้นสุดเซสชันการแก้ไขข้อบกพร่องและเริ่มต้นใหม่
เมื่อคุณแก้ไขจุดบกพร่อง คุณมักจะต้องดูสคริปต์เหล่านี้ที่ทำงานในกระบวนการแยกต่างหาก
พิมพ์คำสั่งบันทึกทั้งหมดจากผู้ช่วยเจ้าของภาษาโดยใช้ DEBUG_HELPERS=true
:
DEBUG_HELPERS=true bin/dry-run.rb bundler dependabot/demo --dir= " /ruby "
หยุดการดำเนินการชั่วคราวเพื่อดีบักฟังก์ชันตัวช่วยเนทีฟตัวเดียวโดยใช้ DEBUG_FUNCTION=<function name>
ฟังก์ชันแมปกับชื่อฟังก์ชันตัวช่วยเนทิฟ เช่น หนึ่งในฟังก์ชันใน bundler/helpers/v2/lib/functions.rb
เมื่อฟังก์ชันนี้ถูกดำเนินการ debugger
จะถูกแทรก โดยจะหยุดการทำงานของสคริปต์ bin/dry-run.rb
ชั่วคราว ซึ่งจะปล่อยให้ไดเร็กทอรีอัพเดต tmp
ปัจจุบันยังคงอยู่ ซึ่งช่วยให้คุณสามารถ cd
ลงในไดเร็กทอรีและรันฟังก์ชันตัวช่วยเนทิฟได้โดยตรง:
DEBUG_FUNCTION=parsed_gemfile bin/dry-run.rb bundler dependabot/demo --dir= " /ruby "
= > fetching dependency files
= > dumping fetched dependency files: ./dry-run/dependabot/demo/ruby
= > parsing dependency files
$ cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby && echo " { " function " : " parsed_gemfile " , " args " :{ " gemfile_name " : " Gemfile " , " lockfile_name " : " Gemfile.lock " , " dir " : " /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby " }} " | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
คัดลอกและรันคำสั่ง cd...
:
cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby && echo " { " function " : " parsed_gemfile " , " args " :{ " gemfile_name " : " Gemfile " , " lockfile_name " : " Gemfile.lock " , " dir " : " /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby " }} " | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
สิ่งนี้ควรออกจากระบบเอาต์พุตของฟังก์ชัน parsed_gemfile
:
{ "result" : [ { "name" : "business" , "requirement" : "~> 1.0.0" , "groups" : [ "default" ] , "source" : null , "type" : "runtime" } , { "name" : "uk_phone_numbers" , "requirement" : "~> 0.1.0" , "groups" : [ "default" ] , "source" : null , "type" : "runtime" } ] }
โปรดทราบว่าการเปลี่ยนแปลงในเครื่องโฮสต์ของคุณเป็นซอร์สโค้ดของผู้ช่วยเนทิฟจะไม่ซิงค์กับคอนเทนเนอร์การพัฒนา ซึ่งต่างจากการเปลี่ยนแปลงในแหล่งที่มา Ruby ดังนั้นคุณจึงมีทางเลือกสองทางในการแก้ไขผู้ช่วยเจ้าของภาษา:
vi /opt/bundler/v1/lib/functions/file_parser.rb
จากนั้นรันคำสั่ง cd...
อีกครั้ง นี่เป็นวิธีที่เร็วที่สุดในการแก้ไขข้อบกพร่อง แต่การเปลี่ยนแปลงใดๆ จะไม่ถูกบันทึกนอกคอนเทนเนอร์ ระบบนิเวศส่วนใหญ่ในการรองรับ Dependabot-Core ignore
เงื่อนไขที่อนุญาตให้ผู้ใช้สามารถระบุชื่อการพึ่งพาหรือเวอร์ชันที่จะแยกออกจากการอัพเกรด เอกสารสำหรับบริการ Dependabot ที่ GitHub อธิบายคุณสมบัติโดยละเอียดเพิ่มเติม
Dependabot CLI รองรับการส่งผ่านเงื่อนไขการเพิกเฉยโดยเป็นส่วนหนึ่งของคำจำกัดความของงาน ดูตัวอย่าง
สคริปต์การทดลองเรียกใช้รองรับการส่งผ่านเงื่อนไขการละเว้นอย่างน้อย 1 เงื่อนไขผ่าน env var IGNORE_CONDITIONS
:
IGNORE_CONDITIONS= ' [{"dependency-name":"*","update-types": ["version-update:semver-major"]}] '
bin/dry-run.rb docker test_org/test-dependabot `
ระบบนิเวศจำนวนมากใน Dependabot-Core รองรับการอัปเดตความปลอดภัย นี่เป็นรูปแบบพิเศษของการอัปเดตเวอร์ชันที่มีการส่งชื่อการขึ้นต่อกันและช่วงของเวอร์ชันที่มีช่องโหว่ Dependabot-Core จะพยายามอัปเกรดอินสแตนซ์ใดๆ ของการขึ้นต่อกันนั้นเป็นเวอร์ชัน ขั้นต่ำ ที่ไม่มีช่องโหว่ ซึ่งตรงกันข้ามกับการอัปเดตเวอร์ชันปกติที่พยายามอัปเดตเป็นเวอร์ชัน ล่าสุด
env var SECURITY_ADVISORIES
อนุญาตให้ส่งการแจ้งเตือนความปลอดภัยตั้งแต่หนึ่งรายการขึ้นไปไปยังสคริปต์การทดลองเรียกใช้เพื่อจำลองการอัปเดตความปลอดภัย:
SECURITY_ADVISORIES= ' [{"dependency-name":"buffer","patched-versions":[],"unaffected-versions":[],"affected-versions":["<= 2.0.0"]}] '
bin/dry-run.rb pub dart-lang/pub-dev --dir " /app " --cache=files --dep= " buffer "
มีการสนับสนุนในตัวสำหรับการใช้ประโยชน์จากความสามารถของ Visual Studio Code สำหรับการดีบักภายในคอนเทนเนอร์ Docker หลังจากติดตั้งส่วนขยาย Dev Containers
ที่แนะนำ เพียงกด Ctrl+Shift+P
( ⇧⌘P
บน macOS) แล้วเลือก Dev Containers: Reopen in Container
คุณยังเข้าถึงเมนูแบบเลื่อนลงได้โดยคลิกปุ่มสีเขียวที่มุมซ้ายล่างของเครื่องมือแก้ไข หากไม่มีอิมเมจ Docker การพัฒนาบนเครื่องของคุณ รูปภาพนั้นจะถูกสร้างขึ้นโดยอัตโนมัติ เมื่อเสร็จแล้ว ให้เริ่มการกำหนดค่า Debug Dry Run
(F5)
และคุณจะได้รับแจ้งให้เลือกตัวจัดการแพ็คเกจและพื้นที่เก็บข้อมูลเพื่อดำเนินการทดลองรัน อย่าลังเลที่จะวางเบรกพอยต์บนโค้ด
นอกจากนี้ยังมีการรองรับการดีบักการทดสอบแต่ละรายการโดยการรันการกำหนดค่า Debug Tests
(F5)
และคุณจะได้รับแจ้งให้เลือกระบบนิเวศและระบุเส้นทาง rspec
Clone Repository ...
ของส่วนขยาย Remote Containers ขาดฟังก์ชันการทำงานบางอย่างอยู่ ดังนั้นจึงไม่ได้รับการสนับสนุน คุณต้องโคลนพื้นที่เก็บข้อมูลด้วยตนเอง และใช้คำสั่ง Reopen in Container
หรือ Open Folder in Container...
เมื่อคุณได้รับสภาพแวดล้อมการพัฒนาสำหรับระบบนิเวศใดระบบหนึ่งแล้ว ให้ดำเนินการทดสอบสำหรับระบบนิเวศนั้นโดยเรียกใช้ข้อมูล rspec spec
ภายในโฟลเดอร์ของระบบนิเวศนั้น เช่น
$ cd go_modules
$ rspec spec
คุณยังสามารถจำกัดการทดสอบให้เหลือเพียงไฟล์ที่คุณกำลังทำงานอยู่ หรือเฉพาะการทดสอบที่ล้มเหลวก่อนหน้านี้ เช่น:
$ rspec spec/dependabot/file_updaters/elixir --only-failures
สไตล์ถูกบังคับใช้โดย RuboCop หากต้องการตรวจสอบการละเมิดรูปแบบ เพียงเรียกใช้ rubocop
ในแต่ละแพ็คเกจ เช่น
$ cd go_modules
$ rubocop
คุณสามารถสร้างโปรไฟล์ dry-run ได้โดยส่งแฟล็ก --profile
เมื่อรัน หรือแท็กการทดสอบ rspec
ด้วย :profile
สิ่งนี้จะสร้างไฟล์ stackprof-<datetime>.dump
ในโฟลเดอร์ tmp/
และคุณสามารถสร้าง Flamegraph จากสิ่งนี้ได้โดยการรัน:
stackprof --d3-flamegraph tmp/stackprof- < data or spec name > .dump > tmp/flamegraph.html
Dependabot-Core คือชุดของแพ็คเกจ Ruby (อัญมณี) ซึ่งมีตรรกะสำหรับการอัปเดตการอ้างอิงในหลายภาษา
dependabot-common
แพ็คเกจ common
ประกอบด้วยฟังก์ชันการใช้งานทั่วไป/ใช้งานร่วมกันทั้งหมด ตัวอย่างเช่น รหัสสำหรับการสร้างคำขอดึงสำหรับแพลตฟอร์มต่างๆ ที่รองรับจะอยู่ที่นี่ เช่นเดียวกับตรรกะส่วนใหญ่ในการจัดการการขึ้นต่อกันของ Git (เนื่องจากภาษาส่วนใหญ่รองรับการขึ้นต่อกันของ Git ไม่ทางใดก็ทางหนึ่ง) นอกจากนี้ยังมีคลาสพื้นฐานที่กำหนดไว้สำหรับข้อกังวลหลักแต่ละข้อที่จำเป็นในการดำเนินการสนับสนุนสำหรับภาษาหรือตัวจัดการแพ็คเกจ
dependabot-{package-manager}
มีอัญมณีสำหรับผู้จัดการแพ็คเกจหรือภาษาแต่ละตัวที่ Dependabot รองรับ อย่างน้อยที่สุด แต่ละอัญมณีเหล่านี้จะใช้คลาสต่อไปนี้:
บริการ | คำอธิบาย |
---|---|
FileFetcher | ดึงข้อมูลไฟล์การพึ่งพาที่เกี่ยวข้องสำหรับโครงการ (เช่น Gemfile และ Gemfile.lock ) ดู README สำหรับรายละเอียดเพิ่มเติม |
FileParser | แยกวิเคราะห์ไฟล์การพึ่งพาและแยกรายการการพึ่งพาสำหรับโปรเจ็กต์ ดู README สำหรับรายละเอียดเพิ่มเติม |
UpdateChecker | ตรวจสอบว่าการขึ้นต่อกันที่กำหนดเป็นข้อมูลล่าสุดหรือไม่ ดู README สำหรับรายละเอียดเพิ่มเติม |
FileUpdater | อัปเดตไฟล์การขึ้นต่อกันเพื่อใช้เวอร์ชันล่าสุดของการขึ้นต่อกันที่กำหนด ดู README สำหรับรายละเอียดเพิ่มเติม |
MetadataFinder | ค้นหาข้อมูลเมตาเกี่ยวกับการขึ้นต่อกัน เช่น GitHub URL ดู README สำหรับรายละเอียดเพิ่มเติม |
Version | อธิบายตรรกะสำหรับการเปรียบเทียบเวอร์ชันที่ขึ้นต่อกัน ดูคลาสเวอร์ชันฐานสิบหกสำหรับตัวอย่าง |
Requirement | อธิบายรูปแบบของข้อกำหนดการพึ่งพา (เช่น >= 1.2.3 ) ดูคลาสความต้องการฐานสิบหกสำหรับตัวอย่าง |
กระแสระดับสูงมีลักษณะดังนี้:
dependabot-omnibus
นี่คืออัญมณี "เมตา" ที่ขึ้นอยู่กับอัญมณีอื่นทั้งหมด หากคุณต้องการรวมการสนับสนุนสำหรับทุกภาษาโดยอัตโนมัติ คุณสามารถรวมอัญมณีนี้แล้วคุณจะได้รับทุกสิ่งที่คุณต้องการ
สำหรับระบบนิเวศจำนวนมาก Dependabot-Core รองรับการลงทะเบียนส่วนตัว บางครั้งสิ่งนี้เกิดขึ้นโดยการส่งข้อมูลรับรองรีจิสทรีส่วนตัวโดยตรงไปยังผู้จัดการแพ็คเกจดั้งเดิม ( npm
, pip
, bundler
ฯลฯ ) บางครั้งก็เกิดขึ้นภายในรหัส Dependabot-Core Ruby
ลำดับไดอะแกรม
ข้อมูลรับรองการลงทะเบียนส่วนตัว ->>Dependabot-Core:<br />
Dependabot-Core->>ตัวจัดการแพ็คเกจดั้งเดิม:<br />
ตัวจัดการแพ็คเกจดั้งเดิม->>การลงทะเบียนแพ็คเกจ:<br />
Dependabot-Core->>การลงทะเบียนแพ็คเกจ:<br />
แม้ว่าจะเรียบง่ายและตรงไปตรงมา แต่นี่เป็นความเสี่ยงด้านความปลอดภัยสำหรับระบบนิเวศที่อนุญาตให้เรียกใช้โค้ดที่ไม่น่าเชื่อถือภายในไฟล์ Manifest ตัวอย่างเช่น setup.py
และ .gemspec
อนุญาตให้เรียกใช้โค้ด Python และ Ruby ดั้งเดิม หากแพ็คเกจในแผนผังการพึ่งพาถูกแฮ็ก ผู้โจมตีอาจส่งรายการที่เป็นอันตรายซึ่งบังคับให้ตัวจัดการแพ็คเกจดั้งเดิมเปิดเผยเครดิต
เพื่อป้องกันสิ่งนี้ สำหรับบริการ Dependabot ที่ Github ทำงาน เราจะรวม Dependabot-Core ด้วยพร็อกซีข้อมูลประจำตัว เพื่อไม่ให้ความลับของรีจิสทรีส่วนตัวเหล่านั้นถูกเปิดเผยต่อ Dependabot-Core
ลำดับไดอะแกรม
Dependabot-Core->>พร็อกซีข้อมูลรับรอง: คำขอทั้งหมดไม่ได้รับการรับรองความถูกต้อง
หนังสือรับรองพร็อกซี ->>การลงทะเบียนแพ็คเกจ: หนังสือรับรองถูกแทรกโดยพร็อกซี
หมายเหตุด้านซ้ายของ Dependabot-Core: บริการ Dependabot<br /> ที่ GitHub ทำงาน
การลงทะเบียนแพ็คเกจ->>พร็อกซีข้อมูลประจำตัว: หนังสือรับรองจะถูกถอดโดยพร็อกซี
หนังสือรับรองพร็อกซี -> Dependabot-Core: Dependabot-Core ไม่เคยเห็นข้อมูลรับรองรีจิสทรีส่วนตัว
นอกจากนี้ยังหมายความว่าหาก Dependabot-Core เคยมีช่องโหว่ด้านความปลอดภัย ความน่าเชื่อถือเหล่านั้นก็ยังไม่เสี่ยงที่จะถูกเปิดเผย
โครงการนี้อาจมีเครื่องหมายการค้าหรือโลโก้สำหรับโครงการ ผลิตภัณฑ์ หรือบริการ การใช้เครื่องหมายการค้าหรือโลโก้ GitHub โดยได้รับอนุญาตนั้นอยู่ภายใต้และต้องปฏิบัติตามโลโก้และการใช้งาน GitHub การใช้เครื่องหมายการค้าหรือโลโก้ GitHub ในเวอร์ชันแก้ไขของโครงการนี้จะต้องไม่ทำให้เกิดความสับสนหรือบ่งบอกถึงการสนับสนุน GitHub การใช้เครื่องหมายการค้าหรือโลโก้ของบุคคลที่สามจะต้องเป็นไปตามนโยบายของบุคคลที่สามเหล่านั้น
Dependabot และ dependabot-core เริ่มต้นชีวิตในชื่อ Bump และ Bump Core ย้อนกลับไปเมื่อ @hmarr และ @greysteil ทำงานที่ GoCardless
Dependabot กลายเป็นส่วนหนึ่งของ GitHub ในปี 2019!
เผยแพร่รุ่นใหม่ไปยัง RubyGems โดยเรียกใช้เวิร์กโฟลว์ Gems - Bump Version
และทำตามคำแนะนำในสรุปงาน
โดยสรุปกระบวนการจะเป็นดังนี้:
v1.2.3
สรุปงานประกอบด้วย URL ที่เติมไว้ล่วงหน้าด้วยเวอร์ชันที่ถูกต้องสำหรับชื่อและแท็ก