If CSRF vulnerabilities persist even after removing DML statements, here's how you can address them:
1. **Enable CSRF Token Requirement**: For Visualforce pages, set the `confirmationTokenRequired` metadata field to `true`. This ensures that GET requests to the page require a CSRF token in the URL, preventing unauthorized access.
2. **Avoid State Changes During Initialization**: Ensure that no state changes or operations are performed during the initialization of Apex controllers. Instead, trigger these actions through explicit user interactions, like button clicks.
For more detailed guidance, refer to the [Salesforce documentation on CSRF protection](https://developer.salesforce.com/docs/atlas.en-us.packagingGuide.meta/packagingGuide/secure_code_violation_request_forgery.htm).