QR Code Security: how to prevent quishing and malicious redirects
QR codes are convenient because they remove friction.
Attackers like them for the same reason.
"Quishing" is QR code phishing: a QR code that sends someone to a malicious website or to a lookalike login page.
If you run QR codes in the real world (posters, menus, mailers, packaging, business cards), you should treat QR code security like any other marketing risk.
This guide is practical and conservative. No hype. Just steps you can take today.
TL;DR
- Use HTTPS destinations and avoid messy redirect chains.
- If you use a dynamic QR code, protect the redirect and restrict who can change it.
- Make the destination obvious: label what the QR code does and where it goes.
- Use unique QR codes per placement so you can detect tampering.
- Keep QR codes scan friendly (size, quiet zone, contrast) to reduce repeated scans and user confusion.
What quishing looks like in real life
Quishing usually falls into a few patterns:
- Sticker overlay: someone places a sticker with a different QR code on top of yours.
- Lookalike domain: the scan leads to a domain that resembles your brand.
- Redirect abuse: a short link or redirect service is edited to point somewhere else.
- Credential bait: the landing page immediately asks for login, payment, or personal data.
The threat is not theoretical. Any printed code in public is exposed.
The safest approach: make the destination trustworthy
The most effective protection is to make it obvious, consistent, and hard to fake.
1) Use your own domain
When possible, route scans through a domain people recognize.
- good:
https://yourbrand.com/menu - risky: a random short domain users have never seen
If you must use a short link, ensure it is branded and controlled.
2) Always use HTTPS
HTTPS is table stakes.
If your destination is not HTTPS, many phones and browsers will warn users, and attackers can intercept traffic more easily.
3) Avoid long redirect chains
Redirects can be useful (for dynamic QR codes), but long chains make it hard for users to understand where they are going.
If you use redirects, keep it tight:
- 1 redirect is normal
- 2 or more is often a smell
Related reading: /blog/qr-redirects-best-practices
4) Lock down who can edit destinations
Dynamic QR codes are great for marketing, but they add a control plane.
Protect it like you would protect your website:
- use strong passwords and 2FA
- restrict admin access
- review audit logs
- avoid shared logins
If you use QRShuffle, keep ownership limited and treat edits as production changes.
Related reading: /blog/dynamic-qr-code and /blog/editable-qr-code
Make the QR code harder to tamper with
5) Use unique codes per location
If you print one QR code and use it everywhere, you will never know which location was compromised.
Instead, generate separate QR codes per placement:
- storefront window
- register counter
- each table tent design
- each poster run
That makes it easier to:
- monitor scans by placement
- spot sudden changes
- reprint only the affected location
Related reading: /blog/qr-code-analytics
6) Add human readable labeling
A QR code without context is a trust problem.
Add a short label near the code:
- what it does: "View menu" or "Pay invoice"
- where it goes: "yourbrand.com"
- what to expect: "No login required"
This reduces the success rate of sticker overlays because users have a reference.
7) Use tamper evident placement
If possible:
- place the code behind a window
- print it as part of the design instead of a separate sticker
- use matte laminate so overlays are easier to spot
Reduce user confusion (confusion helps attackers)
A surprising amount of "security" comes down to user experience.
If scanning is unreliable, people scan repeatedly, switch camera apps, and stop paying attention.
8) Keep QR codes scan friendly
Use:
- enough size for the expected distance
- strong contrast
- a proper quiet zone
Related reading:
- /blog/qr-code-size-scanning-distance
- /blog/qr-quiet-zone-explained
9) Use fast landing pages
Slow pages increase drop off and make users second guess the scan.
Related reading: /blog/landing-page-speed-for-scans
A simple security checklist for your next print run
- Destination is HTTPS and on a recognizable domain
- Only one redirect, and it is controlled
- Dynamic destination edits require a protected account
- QR code is labeled with action + domain
- Unique QR code per location
- Scan friendly design (size, quiet zone, contrast)
- Landing page loads fast
CTA: make your QR codes editable, trackable, and safer
QRShuffle helps you generate dynamic QR codes you can update without reprinting, plus scan analytics so you can spot anomalies by placement.
Create your first QR code in minutes:
