Docuboxer
By Sergio Alonzo Piña··7 min read

Malicious QR codes: how to check one before you scan

Quishing uses QR codes to send you to fake sites. What to check before scanning, how to see the real destination, and the URL tricks to watch for.

A QR code is safe to scan once you can see what it actually encodes before your phone acts on it — decode the pattern into plain text first, read the real destination, then decide whether to go there. The underlying problem is that a QR code is opaque to the human eye: unlike a typed link, there's no way to tell a legitimate code from a fraudulent one just by looking at it, and plenty of camera apps open the decoded link automatically the moment they recognize the pattern, skipping the chance to check it at all. You can break that automatic step with the Docuboxer safe QR scanner: it decodes the image in your browser, shows you the content as text and, when that content is a link, analyzes it — real domain, homoglyphs, scheme, shorteners — before you decide whether to open it. If all you want is the raw text, the QR reader handles the decoding half.

Why a QR code is riskier than a typed link

A text link — even a disguised one — keeps some visible structure: you can hover over it, glance at the domain before clicking. A QR code offers none of that; it's a grid of black and white squares that only a reader can translate. That opacity is exactly what quishing (QR phishing) exploits, and it shows up in a handful of scenarios that keep recurring:

  • Sticker overlays. The cheapest attack to pull off and one of the most reported: a fraudulent QR code printed on a sticker sized and finished to match, then stuck over the real one on a parking meter, an EV charging station, or a restaurant table tent. The physical context looks exactly as expected, so nobody thinks to question it.
  • QR codes replacing links in phishing emails. Many email security filters scan URLs but not the content of an embedded image. Putting the malicious link inside a QR code sidesteps that filter entirely, and it forces the target to open the link on their phone — where scrutinizing the address bar tends to be harder than on a desktop.
  • Fake posters in public spaces. "Scan to pay this ticket," "scan for free parking," or "scan to claim a prize" flyers rely on urgency and an unfamiliar setting — an airport, a new city, a municipal lot — to reduce the odds anyone stops to check where the code actually leads.

How to analyze a QR code's link without opening it

Decoding is step one; step two is reading that link with a critical eye, and that's exactly where most people stall. The safe QR scanner chains both together: it reads the code from an image or your camera, identifies what kind of content it carries — a URL, Wi-Fi credentials, a vCard, a phone number, an SMS or plain text — and, when it's a URL, takes it apart and flags the patterns that tend to accompany a fraudulent link. All of it happens inside your browser: neither the image nor the URL leaves your device, and the tool never visits the link to check it.

Among the signals it flags on a decoded link:

  • Homoglyphs and punycode. A domain containing non-Latin characters is encoded into ASCII with an xn-- prefix; the analysis reverses that to show you the hostname as it actually reads, and warns when it mixes writing systems — a Cyrillic "a" sitting among Latin letters, for instance.
  • Scheme, literal IPs and ports. Links that aren't http or https, hosts that are a bare IP address rather than a domain, and ports outside the usual ones.
  • Known shorteners and suspicious subdomains. Shortener domains, unusually long subdomain chains, and labels that look random (high entropy) — the signature of throwaway infrastructure.
  • Embedded credentials. The something@domain.com form inside a URL: everything before the @ is ignored when navigating, but at a glance it reads as the destination domain. A classic impersonation trick.
  • Tracking parameters. Not dangerous in themselves, but they tell you who is going to measure your visit if you open the link.

None of these signals is a verdict, and that distinction matters: a link that triggers nothing is not thereby safe — it just doesn't carry the most common tricks in plain sight. The analysis gives you the facts; the decision stays with you. And when the link arrives pasted in an email or a message rather than inside a QR code, the same engine powers the link safety checker, where you paste it as text and get the same signals.

What to check in the URL once it's decoded

It's worth knowing what that analysis looks at, because you're the one deciding and plenty of times you'll have a URL in front of you with no tool at hand. When the content is a URL, there are four specific things worth checking before opening it:

  • The real domain vs. a subdomain wearing a brand's name. yourbank.com and yourbank.com.verify-account.net are not the same domain — the part that counts is whatever sits directly in front of the first / after the root domain, not any fragment that happens to contain the brand name. yourbank.secure-login.info isn't your bank either: the real domain is secure-login.info.
  • Shorteners that hide the destination. A shortened link doesn't reveal where it goes until you follow it, which cancels out the exact advantage of decoding the QR code by hand in the first place. A generic shortener domain where you expected a brand's own site deserves the same caution as a QR code you haven't decoded at all — the destination is still unknown.
  • Lookalike characters (homoglyphs). Certain Unicode characters are visually near-identical to Latin letters — a Cyrillic "a" standing in for the Latin one, for instance — which lets attackers register domains that read as correct but aren't. If something about the domain doesn't sit right on a careful look, that's reason enough to stop rather than continue.
  • Schemes that aren't http or https. A QR code can encode a link using an intent:// or market:// scheme designed to launch an app or app-store listing directly, bypassing the browser and its usual warnings. If the decoded text doesn't start with something you recognize, treat that as a signal to stop, not to proceed.

If the URL carries percent-encoded parameters and you want to see exactly what characters they hide, the URL encoder/decoder reverses that encoding into readable text — a useful extra step when a link looks like it's carrying hidden data.

A QR code isn't always a URL

Not every QR code points to a website, and each content type triggers a different action if your app processes it without asking:

  • Wi-Fi credentials. A QR code of this type carries the network name and password as plain text: WIFI:S:MyNetwork;T:WPA;P:mypassword;;. Scanning it joins that specific network — one controlled by whoever posted the code, not necessarily the business you assume is offering it.
  • Contact cards (vCard). These save a name, phone number, and email straight into your address book. The risk isn't technical so much as social engineering: a contact labeled as IT support or a coworker can set up a follow-on scam.
  • Payment links. Increasingly common at restaurants and parking garages. The same domain checks that apply to any URL apply here, with more urgency — a fraudulent payment QR code doesn't just steal your attention, it steals your money directly.

Seeing the content type before your phone acts on it — opening a browser, joining a network, saving a contact — is the difference between you deciding and the QR code deciding for you.

The habit that actually works: decode, read, decide

The practical defense doesn't require memorizing lists of fake domains or installing anything — it's a fixed order of steps. First, decode the QR code into plain text using a tool that doesn't open the link on its own. Second, read the full destination — domain, scheme, parameters — with the same attention you'd give a suspicious link in an email. Third, decide, and only then, if you decide to proceed, open it. The QR reader covers that first step — it processes the image in your browser, never uploads it anywhere, and hands you the raw text — while the safe QR scanner covers steps one and two, decoding the code and then breaking the link down into its signals. Step three, deciding, is the one no tool takes off your hands.

If the QR code is one you're generating — to share a link, a guest Wi-Fi network, or a contact card — the QR code generator lets you check the result before printing it, and it's also a good way to see why QR was chosen over a linear barcode: it holds more data and tolerates more scan errors than a format like EAN-13 or Code128, which you can generate and compare with the barcode generator.

What this check doesn't cover

It's worth being honest about what decoding a QR code accomplishes and what it doesn't. Seeing the URL doesn't validate it — a domain can read as entirely correct, with no lookalike characters and no odd subdomain, and still be a fraudulent site registered that same week. The tools decode the content and flag suspicious patterns in the link, but they don't check reputation databases or visit the destination to see what it serves, the same way a barcode reader doesn't tell you whether a product is genuine. A link with no flags is a link with no obvious tricks, not a verified one. And if the QR code links to a file to download — an installer, a PDF, an APK — checking the URL doesn't substitute for verifying that file's integrity once it's on your machine, which is what a hash generator is for: comparing the file's SHA-256 hash against the one published by the official source confirms nothing was altered along the way.

Decoding before scanning meaningfully lowers the risk, but it doesn't eliminate it. The same rule applies as with any link: if something is pushing urgency, asking for payment details or credentials, or the domain doesn't match exactly what you expect, don't continue.

Frequently asked questions

Is scanning a QR code itself dangerous?

No — reading the pattern into text doesn't execute anything on its own. The risk is what happens next: if the decoded text is a link and your camera app opens it automatically, you never get a chance to look at it first. Decode into plain text before anything opens, and you remove that automatic step.

Can I see where a QR code leads without opening it?

Yes. Decoding the code turns the pattern of squares into the text it holds, and if that text is a URL you can read the full destination without visiting it. Docuboxer's safe QR scanner chains both steps: it decodes the image in your browser, then breaks the URL apart — scheme, real domain, subdomains, path and parameters — flagging patterns like homoglyphs, a literal IP address instead of a domain, or known shorteners. It never opens the link or sends it to a server; it only shows you where you'd be going.

What is quishing?

Quishing (QR + phishing) is phishing delivered through a QR code instead of a link or an email attachment. It works because a QR code hides the destination from view: a fake sticker over a real parking meter's QR code, a swapped code on a restaurant table tent, or a QR embedded in an email all lead to a lookalike site built to steal payment details or login credentials.

Can a QR code install malware just by scanning it?

Not through the scan itself, which only reads text. The actual danger is what that text points to — a link to an APK or installer, or a page mimicking a system update that requests permissions. The QR code is the delivery mechanism, the same way a link in an email is; the harm comes from what's at the other end, not the scan.

What else can a QR code contain besides a URL?

A QR code can hold Wi-Fi credentials, a contact card (vCard), a calendar event, a phone number, or increasingly a payment link. Each type triggers a different action if your app processes it without asking: joining a network, saving a contact, or opening a payment gateway. Seeing the raw text first tells you exactly which of these you're about to authorize.

Are Wi-Fi QR codes at coffee shops and airports safe?

Knowing the password isn't the main risk — joining a network controlled by whoever put up the code is. If you decode the QR code first and see a string like `WIFI:S:<network>;T:WPA;P:<password>;;`, you at least know which specific network you'd be connecting to before you accept it.

Does Docuboxer tell you whether a link is dangerous?

It doesn't hand you a verdict. The QR reader simply decodes the content and shows it as plain text; the safe QR scanner goes further and flags specific patterns in the link — homoglyphs, schemes outside http/https, literal IPs, shorteners, embedded credentials — but it still doesn't consult reputation lists or visit the URL, because the whole analysis runs in your browser. A link that triggers no flags isn't a safe link, it's a link with none of the common tricks on show. The final call is yours.

Check a QR code's link before you open it

Decode the code and review the destination: real domain, homoglyphs, scheme and shorteners. Free, in your browser, and the URL is never visited.

Open safe QR scanner →

Related tools

You might also like: 13 privacy-first developer tools.