Independent Application Review
Harbourline Client Portal
Harbourline Bookkeeping (fictional)
Executive summary
However, we identified one high-priority issue that should be resolved before more clients are invited: under certain conditions, a signed-in client can view statements belonging to another client. We also found that error pages reveal unnecessary technical detail, that some lists will become slow as data grows, and that there is no documented, tested way to recover the database.
Application overview
A small customer portal where clients of a bookkeeping firm upload receipts, view statements and message their bookkeeper. Built by the firm's owner over several months using an AI coding assistant, a popular JavaScript framework, a managed Postgres database and a serverless hosting platform.
Review scope
- Source code repository (read-only access) at an agreed commit
- Hosting, environment and database configuration (read-only)
- Authenticated testing in a staging copy using two test client accounts
- Review of authentication, authorization, data handling and error handling
Findings by priority
HCP-01
Priority:
High
Security — authorization
Clients can view other clients' statements by changing a number in the address
- Observation
- The statement download page checks that a visitor is signed in, but does not check that the requested statement belongs to them. Statement identifiers are sequential numbers.
- Business impact
- Any client could read other clients' financial statements. This is a serious confidentiality breach with potential regulatory, contractual and reputational consequences.
HCP-02
Priority:
Medium
Security — information exposure
Error pages reveal internal implementation details
- Observation
- When a request fails, the application returns the full error message, including database table names, file paths and framework version.
- Business impact
- This does not expose client data directly, but it gives an attacker a map of the system and makes other weaknesses easier to find and exploit.
HCP-03
Priority:
Medium
Architecture — performance and scalability
Receipt and message lists load every record at once
- Observation
- Lists retrieve all of a client's receipts and messages in a single query, without pagination or limits.
- Business impact
- Performance is fine today, but long-standing clients will see slower pages each year, and database costs will grow faster than the number of clients.
Recommended next steps
- Fix HCP-01 before inviting additional clients, and confirm the fix with an automated test.
- Address HCP-02 and HCP-04 within the next few weeks; both are small, contained changes.
- Schedule HCP-03 and HCP-05 into normal improvement work.