Suleyman Musayev·Oct 28Rendering User-Supplied SVG Without Getting BurnedAn SVG is not an image. It is a program the browser will run. If you let users upload avatars, logos, or icons, you are letting them upload…
Suleyman Musayev·Oct 21Memory-Hard Password Hashing in Ruby: Balloon and yescryptYour password hash’s job is to be slow for an attacker and bearable for you. Against a modern GPU farm, being slow is not enough anymore…
Suleyman Musayev·Oct 14The Attacker Doesn’t Need to Know Your Programming Language AnymoreLLMs did not make attackers smarter. They made them cheaper. What your front end has always told the world, and why reading it just got…
Suleyman Musayev·Oct 7Adding OpenID Connect Login to Rails Without the Dependency Pile“Sign in with…” looks like a solved problem until you open the box and find five HTTP clients and a transitive dependency graph the size of…A response icon1A response icon1
Suleyman Musayev·Sep 30The Attacker Filed a Support TicketSome complaints are not feedback. They are an attack on the people who can switch your defenses off. How attackers work on support…
Suleyman Musayev·Sep 23Rendering User-Supplied SVG Without Getting BurnedAn SVG is not an image. It is a program the browser will run. If you let users upload avatars, logos, or icons, you are letting them upload…
Suleyman Musayev·Sep 16Post-Quantum Cryptography Is Here: What FIPS 203, 204, and 205 Mean for EngineersIn 2024 the post-quantum standards stopped being a research topic and became official. You do not need a physics degree to know what to do…
Suleyman Musayev·Sep 9Bringing a Post-Quantum Signature into RubyNIST finalized ML-DSA in 2024 as the post-quantum replacement for the signatures we have trusted for decades. If you write Ruby, how do you…
Suleyman Musayev·Sep 2300 Fake Signups a Day, and the CAPTCHA Was LosingBots do not solve CAPTCHAs anymore. People do. What it takes to defend a signup flow when the attacker’s economics beat yours.
Suleyman Musayev·Aug 26Post-Quantum Keys Don’t Need OpenSSLA post-quantum key exists to outlive classical cryptography. So why does saving one to disk route through the biggest classical crypto…