MSC4260: Reporting users (Client-Server API) (#4260)
* MSC: Reporting users (Client-Server API) * Add guest access requirements * Add examples; fix reason * Clarify that reports don't transit federation, but can still be receivedhs/homeserver-content-trust-level
parent
3f3b34a427
commit
a15271b608
@ -0,0 +1,139 @@
|
||||
# MSC4260: Reporting users (Client-Server API)
|
||||
|
||||
[MSC4151 (merged)](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/4151-report-room.md)
|
||||
added an endpoint to report entire rooms to the server admin, expanding upon the existing report event
|
||||
API. To fully complement this set of APIs, this proposal introduces a Client-Server API endpoint to
|
||||
report entire users, independent of rooms.
|
||||
|
||||
Like MSC4151, the scope of this MSC is intentionally narrow to facilitate quick traversal through the
|
||||
MSC process. Other, future, MSCs may be required to build out even more APIs for reporting content.
|
||||
|
||||
Also like MSC4151, it is expected that a future series of MSCs will revamp reporting in Matrix.
|
||||
|
||||
## Proposal
|
||||
|
||||
Taking inspiration from [`POST /rooms/:roomId/report/:eventId`](https://spec.matrix.org/v1.10/client-server-api/#post_matrixclientv3roomsroomidreporteventid),
|
||||
a new endpoint is introduced:
|
||||
|
||||
```
|
||||
POST /_matrix/client/v3/users/:userId/report
|
||||
{
|
||||
"reason": "<user-supplied, may be empty>"
|
||||
}
|
||||
```
|
||||
|
||||
`reason` is a human-readable string describing the reason for the report. The string may be blank,
|
||||
but *must* be provided (to align with `/report/:eventId`).
|
||||
|
||||
**Note**: `score` is not carried over from `/report/:eventId` because it has not proven useful. A
|
||||
future MSC may introduce it. The same was done in MSC4151 for `/rooms/:roomId/report`.
|
||||
|
||||
There are no restictions on who can report a user: knowing the user ID is sufficient. This is to
|
||||
ensure that results from the user directory, invites, links, etc can all be reported. If the user
|
||||
does not exist on the server, the endpoint returns `404 M_NOT_FOUND`. Otherwise, `200` with `{}` as
|
||||
a response body. If a user doesn't exist and the server wishes to hide that detail, it MAY return a
|
||||
successful (`200`) response instead.
|
||||
|
||||
Like `/report/:eventId`, handling of the report is left as a deliberate implementation detail.
|
||||
|
||||
### Examples
|
||||
|
||||
**Note**: Some clients may need to `encodeURIComponent` (or similar) the user ID to use it in a path
|
||||
parameter.
|
||||
|
||||
```
|
||||
POST /_matrix/client/v3/users/@alice:example.org/report
|
||||
{"reason":"bad person"}
|
||||
|
||||
> 200 OK
|
||||
> {}
|
||||
```
|
||||
|
||||
```
|
||||
POST /_matrix/client/v3/users/@alice:example.org/report
|
||||
{"reason":""}
|
||||
|
||||
> 200 OK
|
||||
> {}
|
||||
```
|
||||
|
||||
```
|
||||
POST /_matrix/client/v3/users/@alice:example.org/report
|
||||
{"reason":""}
|
||||
|
||||
> 404 OK
|
||||
> {"errcode":"M_NOT_FOUND","error":"User does not exist"}
|
||||
```
|
||||
|
||||
## Safety considerations
|
||||
|
||||
* Server admins may be exposed to harmful content through `reason`. This is an existing issue with
|
||||
the reporting module, and difficult to fix. Applications which expose report reasons of any kind
|
||||
are encouraged to place disclosures in the user experience path. For example, a page explaining
|
||||
that the tool may contain harmful content before allowing the user temporary access, or the use of
|
||||
spoiler tags on report reasons/content.
|
||||
|
||||
* Clients MAY add reported users to the [ignore list](https://spec.matrix.org/v1.13/client-server-api/#ignoring-users)
|
||||
to both discourage duplicate reports and to remove the harmful content from the user's view, where
|
||||
possible. This may require filtering user directory responses and local timeline filtering.
|
||||
|
||||
* Users may report other users instead of events in any specific room, particularly during a harmful
|
||||
content spam wave. Administrators and safety teams should aim to clean up a user's events if they
|
||||
take action against the account, where appropriate.
|
||||
|
||||
* 'Report flooding' is more easily possible with this new endpoint, where many users report a user
|
||||
with the hope of getting them kicked off the server. Automated decision making is not recommended
|
||||
for this endpoint to prevent consequences like this from happening. Teams may wish to consider using
|
||||
reversible options like [suspension](https://spec.matrix.org/v1.13/client-server-api/#account-suspension)
|
||||
and [locking](https://spec.matrix.org/v1.13/client-server-api/#account-locking).
|
||||
|
||||
## Potential issues
|
||||
|
||||
* Within the Trust & Safety environment, it is well known that `reason` alone is insufficient for an
|
||||
informed report. Self-triage categories and mandatory `reason` for some of those categories help
|
||||
improve a safety team's ability to handle a report. These features are not included in this proposal
|
||||
as they require further thought and consideration - a future MSC may expand (or even deprecate) the
|
||||
report endpoints to support this added information.
|
||||
|
||||
* While reports against non-local users are permitted, this MSC does not introduce a way for those
|
||||
reports to transit federation to the target's server. This is considered an issue for another MSC,
|
||||
like [MSC3843](https://github.com/matrix-org/matrix-spec-proposals/pull/3843) or
|
||||
[MSC4202](https://github.com/matrix-org/matrix-spec-proposals/pull/4202).
|
||||
|
||||
* Whether a user exists on the server is revealed through the new endpoint. Servers have the option
|
||||
to mask this detail by ignoring the report.
|
||||
|
||||
## Alternatives
|
||||
|
||||
* If the client is aiming to report a user within a room, reporting the membership event within that
|
||||
room may be suitable. If the user is aiming to report a broad pattern of behaviour, or a profile
|
||||
concern spanning multiple rooms/communities, a more generic API is preferred. A dedicated API is
|
||||
also required when users are shown outside the context of a room, such as during invites (when event
|
||||
IDs may not be known) or when looking for users/friends to chat to.
|
||||
|
||||
* [MSC4202](https://github.com/matrix-org/matrix-spec-proposals/pull/4202) discusses the idea of
|
||||
reporting profiles generally, and aims to work within the context of a room. Introducing a new
|
||||
dedicated endpoint is compatible with MSC4202's objectives.
|
||||
|
||||
## Security considerations
|
||||
|
||||
* Rate limiting is strongly recommended for this new endpoint.
|
||||
|
||||
* Authentication is required for this new endpoint.
|
||||
|
||||
* Guest access is not permitted for this new endpoint to reduce spam. A future MSC may change this
|
||||
out of necessity. MSC4151 and the original report events API are likely similarly affected.
|
||||
|
||||
* Servers which opt to hide the existence of a user on the new endpoint should consider implementing
|
||||
a constant time function to avoid unintentionally disclosing that a user exists by processing the
|
||||
request slower.
|
||||
|
||||
## Unstable prefix
|
||||
|
||||
While this proposal is not considered stable, implementations should use `/_matrix/client/unstable/org.matrix.msc4260/users/:userId/report`
|
||||
instead. Clients should note the [`M_UNRECOGNIZED` behaviour](https://spec.matrix.org/v1.13/client-server-api/#common-error-codes)
|
||||
for servers which do not support the (un)stable endpoint.
|
||||
|
||||
## Dependencies
|
||||
|
||||
This MSC has no direct dependencies.
|
||||
Loading…
Reference in New Issue