-
Notifications
You must be signed in to change notification settings - Fork 34
Add "Protecting RubyGems.org from the outside in" post #257
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,100 @@ | ||||||
| --- | ||||||
| title: "Protecting rubygems.org from the outside in: DOS prevention and compromised passwords" | ||||||
| layout: post | ||||||
| author: Colby Swandale | ||||||
| author_email: colby@rubygems.org | ||||||
| --- | ||||||
|
|
||||||
| Every gem published to [rubygems.org](https://rubygems.org) ends up running on someone's computer. It's up to [rubygems.org](https://rubygems.org) to ensure that each gem contains what it claims, that its metadata is well-formed, and that the person who pushed it is who they say they are. | ||||||
|
|
||||||
| We've been chipping away at that. Over the past few months, we shipped two changes that tighten [rubygems.org](https://rubygems.org)'s defences at very different layers: stronger validation of gem contents at push time, and integration with Have I Been Pwned to catch compromised passwords at login. | ||||||
|
|
||||||
| ## What [rubygems.org](https://rubygems.org) checks when you gem push | ||||||
|
||||||
| ## What [rubygems.org](https://rubygems.org) checks when you gem push | |
| ## What [rubygems.org](https://rubygems.org) checks when you `gem push` |
Copilot
AI
Apr 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The tar listing above shows metadata.gz and checksums.yaml.gz, but this sentence refers to metadata and checksums.yaml. For accuracy (and to avoid confusing readers), consider referencing the actual file names (or explicitly noting the .gz wrappers).
| [rubygems.org](https://rubygems.org) closely inspects all 3 of these files when a gem is published, but the ones we're looking at are the `metadata` and `checksums.yaml`. | |
| [rubygems.org](https://rubygems.org) closely inspects all 3 of these files when a gem is published, but the ones we're looking at are `metadata.gz` and `checksums.yaml.gz`. |
Copilot
AI
Apr 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"sha256" is typically written as "SHA-256" (or "SHA256") when referring to the algorithm name in prose. Consider updating the capitalization/formatting here.
| The `checksums.yaml` certifies the integrity hash of the `data.tar.gz` and `metadata.gz` with a sha256 after `gem build`. If someone tampers with the code directly, the checksums won't match and [rubygems.org](https://rubygems.org) rejects the push immediately. Checksums are the easy part. | |
| The `checksums.yaml` certifies the integrity hash of the `data.tar.gz` and `metadata.gz` with a SHA-256 hash after `gem build`. If someone tampers with the code directly, the checksums won't match and [rubygems.org](https://rubygems.org) rejects the push immediately. Checksums are the easy part. |
Uh oh!
There was an error while loading. Please reload this page.