A real worksheet, graded — and which answers were proved rather than read. See it graded →
Class Margin

Security

How access is protected

A short, honest account of the controls that exist — and the ones that do not yet.

Sign-in

  • Email and password. Passwords are stored as PBKDF2-HMAC-SHA256 with a per-user random salt at 210,000 iterations, the recommended figure for that algorithm.
  • A wrong password and an unknown address give the same answer, in the same words, and take the same time, so sign-in cannot be used to discover which addresses exist.
  • Eight failures locks an address for fifteen minutes.
  • Sessions are signed, HTTP-only cookies.
  • Forgotten passwords are reset by the person who owns the address: a one-time link that expires in thirty minutes, spends itself on use, and ends every other session on the account. It needs a sending domain, so on an instance with no mail configured the sign-in screen does not offer it and says an administrator can set the password instead.

Data boundaries

  • Every database query is scoped to a school, enforced by a test over the data layer rather than by convention.
  • Photographs live in a private bucket and are served only through the Worker to a signed-in member of staff.
  • Answer keys, scores and pages all carry the school they belong to.

Audit

Confirming a key, overriding a score, matching a student, changing accommodations, setting a password and exporting are all recorded with who did it.

Not yet done

  • No two-factor authentication.
  • No single sign-on.

If you find a security problem, raise it privately with whoever operates your instance rather than in a public issue.