Security
Open Stories and Issues
A Space should be able to get the Email for a User: This is particularly useful for lightweight "survey" use cases, where we are passing out shared links, folks are signing up for Querki and then entering themselves into the survey. It's a bit of a UX bug that they wind up typing their email address into
both Querki and the Space itself.
I should be able to define a Space as Hidden: Currently, we decide whether a user can access a Space at all by checking their Read access to the Space Root. (In ClientApi.requestInfo.) This really should be a separate flag, at the system DB level, which says whether non-members can even see the existence of this Space.
I should be able to programmatically set permissions: That is, I want to be able to give a QL expression for something like
Who Can Read
. A Respectful Calm demonstrates this need vividly, where I've hacked in a relatively subtle version of this with the
I Can Read Game
flag, but doing it in user code isn't
remotely as secure as doing it in-engine.
Optimize the Read permission recalculation when a Space changes: This is currently wildly inefficient, and while I try to avoid premature optimization it seems likely to become a disaster for the Arisia Volunteers Space: with hundreds of people frequently modifying a Space with tens of thousands of records, it's likely to bog down.
Querki should rate-limit login attempts: At the moment, we're not doing anything to track login attempts. That's a security hole: a determined attacker could spew lots of login guesses, to try and crack someone's password. If a user has a weak password, this makes it too easy for someone to crack it.
There should be a Can Write Active QL permission: Now that we have side-effecting QL functions (
_changeProperties
,
_notify
, etc), it is now
way too easy to create social-engineering attacks. We need to lock this down, probably by locking down who is allowed to write QL expressions.
Closed Stories and Issues
I should be able to Edit anything I Create: This is just plain necessary if we are ever going to allow Who Can Create to work without Who Can Edit -- since "Create" just creates an empty Thing, I need to then be able to edit it.
QL Functions can run indefinitely: Currently, it is fairly easy to write a QL expression that runs for Way Too Long -- far longer than the Gateway will allow. It's probably possible to write an infinite loop, although we try to avoid that. That's not okay.
Querki should be all-HTTPS: At this point, the technically-sophisticated users increasingly expect it, and it's hard to say that the system has good security without it. So we should just bite the bullet and do it.