Flag Suspicious Sign-Ups That Share IPs With Risky Accounts #49
Labels
No labels
automated
code-quality
component: admin dashboard
component: backend
component: billing
component: content management
component: faqs
component: game genres
component: game lists
component: game reviews
component: game search
component: games
component: internal notifications
component: platforms
component: security
component: tests
component: user api
component: user badges
component: user blogs
component: user consoles
component: user favorites
component: user friends
component: user notifications
component: user profiles
component: user site notifications
component: user wishlists
component: web design
dependencies
javascript
php
priority
high
priority
low
priority
medium
security-hotspot
source: codex
source: sonarqube
status
awaiting feedback
status
backlog
status
done
status
in progress
status
in queue
status
in review
status
needs codex review
status
needs investigation
status
wontfix
type: bug
type: documentation
type: feature
type: improvement
type: regression
type: task
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MyVideoGameList/myvideogamelist.com#49
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The original idea was to notify Discord whenever a new registration used an IP address that had already been used by another account. That is too broad on its own: shared networks, mobile carriers, VPNs, schools, workplaces, and household devices can all create legitimate IP reuse.
Instead, treat reused registration IPs as a moderation signal only when the match is higher risk.
Proposed Behavior
When a new user registers, compare the sign-up IP against existing users with the same IP address, excluding the newly created account.
Create a moderation/security alert only if at least one matching account is suspicious, such as:
Do not alert for every ordinary reused IP match.
Alert Contents
The alert should include the newly registered account:
For each matching risky account, include:
Implementation Notes
Acceptance Criteria
Add Discord Notification For New Account Sign-Ups From Previously Used IPto Flag Suspicious Sign-Ups That Share IPs With Risky AccountsImplemented and merged in PR #974 (master merge revision
378a0344).securityactivity log assuspicious_registration; they are excluded from public activity feeds and follow the existing 365-day cleanup policy.DISCORD_WEBHOOK_URL, an asynchronous queue worker, bounded retries, and resumable paginated embeds. Embeds include admin edit links, Central-time dates with CDT/CST, and inline-codeNULLfor missing activity/deletion dates. Delivery failures preserve the registration and audit record.(ip_address, created_at)lookup index. It must be applied with the deployment environment explicitly selected.Validation: 48 focused tests passed, covering both acceptance paths, every risk flag, burst boundaries, IPv6, snapshots, rollback, delivery failures, embed limits, index rollback, and audit retention. Pint and PHPStan passed. Separate live mock notifications were accepted by Discord and visually reviewed during implementation. The opt-in live-delivery test stays skipped in normal automated runs.
All four acceptance criteria are complete. Dev and production deployment follows this closeout; deployment results will be recorded separately.
Deployment completed for dev and production at merged revision
378a03443d7261b5160d961eb0a6bd88b5f178f6.2026_10_15_120000_add_registration_ip_index_to_users_tableto the explicitly verifiedmvgldev_devandmvgl_proddatabases. Both now have the(ip_address, created_at)lookup index.DISCORD_WEBHOOK_URLvalues are configured and the security activity log is enabled without buffering.mvgl-queue.serviceuser services for both deployment accounts, with user lingering enabled for boot/session-independent processing. Manage the worker as the respective account withsystemctl --user status|restart mvgl-queue.service.Source and vendor rollback backups are available on the deployment host:
/home/mvgldev/deploy-backups/issue49-378a0344-6fd7mkew/home/mvgl/deploy-backups/issue49-378a0344-n115htmfEach environment also has a deployment receipt under its
releases/issue49-378a0344directory. The primary local checkout is back onmaster, pulled to the merged revision, with no local changes.