Skip to content
easeweb
Search topics

Sign-ins you can only pass by picking pictures

A bank's sign-in asks people to pick every picture with a bus, or the photo they uploaded when they opened the account, and offers no other way to finish.

WCAG 2.2
SC 3.3.9AAA· new in 2.2
Required by
Not required by Section 508 or EN 301 549
Broken <legend>Choose the photo you uploaded</legend>
The accessibility problem illustrated: Cognitive:Which one was mine?
01

The problem

People who can't make out the pictures, or can't remember which photo was theirs, can't finish signing in, because picking pictures is the only way through

02

Try it

Your password is in. Finish signing in to the bank

  • Broken 1: pick every picture with a bus, then press Continue. Does the tram count? The panel reads the step from the top, as a screen reader would.

  • Broken 2: pick the photo you uploaded when you opened the account. Do you know which it was?

  • Apply a fix. Can you finish signing in without picking a picture?

Broken Can you fix this?

Sign in

Signing in as [email protected]

Select every picture with a bus

Reading from the top, a screen reader says:

  1. Signing in as [email protected]
  2. Select every picture with a bus, group
  3. Picture 1, checkbox, not checked
  4. Picture 2, checkbox, not checked
  5. Picture 3, checkbox, not checked
  6. …and so on, to Picture 9
  7. Continue, button

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Let people finish signing in without picking pictures

Before

Every picture with a bus

<form action="/sign-in/check" method="post">  <p>Signing in as [email protected]</p>  <fieldset>    <legend>Select every picture with a bus</legend>    <label>      <input type="checkbox" name="picture" value="1">      <img src="/check/1.jpg" alt="Picture 1">    </label>    …  </fieldset>  <button type="submit">Continue</button></form>
What is wrong3 points

The … stands for the other eight pictures, each the same as the first. The markup is what a CAPTCHA service's grid amounts to, whether it is drawn in the page or in the service's frame.

  • The only way on is to recognise the buses among the pictures.
  • The alt text can't say what each picture shows without giving the answer away.
  • Nothing in the step offers another way in.
After

An emailed sign-in link in place of the pictures

<form action="/sign-in/email-link" method="post">  <p>Signing in as [email protected]</p>  <button type="submit">Email me a sign-in link</button></form>
How it is fixed3 steps
  1. Take out the pictures and their question. There is nothing left to recognise or remember.
  2. Send the form to an address where the server emails a link to the account's own address, and the link finishes signing in (technique G218).
  3. Name the button for what it does: "Email me a sign-in link".

This fixes both Befores and passes 3.3.9. It asks people to reach their email and open the link before it expires, so say on the next page where the link went and how long it works.

04

Verify the fix

3 checks, no mouse.

Test with: Screen reader, Keyboard

0 of 3 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the sign-in, its bot check or its second step changes.

Limits

This is a starting pattern, not a guarantee for every sign-in. 3.3.9 is level AAA, which most laws and policies don't require, but the people it protects are the same people a sign-in at AA still shuts out with pictures. It covers signing in, not creating an account or recovering one, though a picture step there stops the same people. An emailed link helps only people who can reach their email, and a passkey only people who have one, so keep more than one way in. Test the whole sign-in, including what appears only to visitors a bot check doubts, with the tools your users rely on.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

EaseWeb service

Fixed it? Keep it from coming back.

I turn guides like this one into rules your coding agents follow and checks your CI runs. Then I retest by hand with a keyboard and screen readers, periodically.

See the service