Broken plugin
-
Someone got their hands dirty and broke the plugin. After the update, the field data was inaccessible, and it started banning everyone. And rightly so—the bad plugin should be removed. Long live it – $spam = true; $reason[‘no_ip’] = ‘Address field empty’;
IP address field of $remote_ip is empty, this means it has been modified, removed or hacked! (i’m getting the real ip from http header). Broken plugin – solution to remove!
-
It’s really cool that can now connect to the filter chain! 🤩
When your plugin became unavailable, so I had to develop a temporary spam protection solution.
In the process, I got a little carried away and as a result, I also got a full-fledged plugin.
Here are its main functions:- Automatic ban by IP address
- Checking the browser language
- Checking the HTTP link
- Checking for prohibited words in the message text
- Checking an empty message
Penalties if the message field is empty. - Checking email for prohibited words
- Check the subject of the message for keywords
- User Agent Verification
- Check the time of filling out the form
- Honeypot
- The Honeypot button – send
Added a hidden submit button that should not be marked. - DNSBL
- Dynamic fields
Adds dynamic fields using JavaScript
that must remain empty or contain certain values. - Interaction time analysis
Analyzes the time and order of filling in the fields. - Checking with regular expressions in the message text
- Analysis of the time required to fill in individual fields
Tracks the focus time on each field and the order in which it is filled in.
Penalty for filling in fields too quickly and for simultaneous/linear ordering. - Token protection
- Reports and the Report Scheduler
Settings: report_enabled, report_email, report_days
Allows you to set up the sending of anti-spam reports by e-mail with a set frequency.
To the address provided on the website, or you can specify another email address (reports for 1-30 days). - Defining form fields
Automatic detection of forms and form fields (name, email address, subject, message)
allows you to configure them manually in the admin area and create exceptions. - Logging
Logs all messages with non-zero penalty points (both blocked
and not) with details (IP, account, reasons, user agent, referrer, etc.). - Admin panel management, quick actions, log cleanup,
reset counters, disable all IP addresses, reset/save settings,
export/import settings (json), export logs (csv) and prohibited IP(txt) - CSS and JS to hide honeypot fields
- Optimized the admin panel for mobile devices
The implementation of these functions helps a lot.:
- In addition to bad words, regex instantly cuts off 70% of spam through the admin panel – very effective.
- Checking for an empty message text prevents a preliminary reconnaissance by spammers and subsequent mailings – this often helps.
- Checking the timestamp is good. But what if the form was submitted on the specified time?,
but the time to fill in each field was only 50-100 ms, which clearly indicates a bot.
Therefore, I added focus and analysis of the interaction time when filling in each of the form fields and the order of filling in the aggregate. - Reports have been added so that don’t have to log into the admin area every time.
The plans are as follows:
- paragraphs 4 and 7 have compiled lists separately, but this is unnecessary. The list of bad words should have been created unified, but it should be processed on a per-field basis, I’ll finalize it later.
- as a priority, I want to add a DNSBL test and a timeout setting in the administration area.
Reason: Many dnsbl are not responding or have a long response time, so as not to add slow or non-working dnsbl to the list.
As a result, the load on the server – DNSBL verification increases the processing time of the form by X ms/s.
By the way, uceprotect.net very aggressive and often blocks good ip addresses. - I tried to quickly fix the caching issue but didn’t succeed. For now, I’ve added the CF7 form page to the WP Super Cache exclusions. It works with caching enabled, but there are some nuances.
- change/replace submit with an interactive button, something like a captcha, take the letter with the mouse and drop it into the mailbox,
like a basketball in a hoop. Or process the time of interaction with the button, set 1-3 seconds instead of clicking. - I didn’t have time to get to the fingerprint, I didn’t have enough time.
Filters allow you to cut off 100% of spam, but little time has passed for a full assessment.
Non c’è male che non porti un bene. Anyway, now I have a backup option. 😊Hi @lemurnick,
I’m incredibly happy to hear about that! As far as development goes, I am always open to proposals and prioritize feedback from users.
Anyway, the best place to share and discuss these detailed architectural ideas and features (like Interaction Time Analysis, unified bad word lists, and DNSBL timeouts) is directly on GitHub in the Discussions section of the plugin repository. It keeps the conversation focused and allows for deeper technical back-and-forth.
Just a couple of comments on your points:
- DNSBL Checks and Timeout: If you enable the plugin’s debug mode (by setting the
WP_DEBUGorCF7ANTISPAM_DEBUGconstant totrue), you will see an additional tab in the plugin admin panel. This tab allows you to verify the status and response time of all your DNSBL servers. DNSBL is fine, but not infallible. My current solution is to use just a few highly reliable servers and set a lower score (e.g., 0.5) when it fails, rather than fully blocking the submission. - Caching Exclusion: Excluding the contact page from caching makes perfect sense. It enables a much wider spectrum of controls on the email sender. In my opinion, the performance loss on a single contact page is irrelevant when weighed against the benefits of better security.
100% Spam Block: Blocking 100% of spam and maintaining that continuously is likely impossible. However, my goal is to make a blocking event as rare as possible for legitimate users, while keeping spam filters highly effective. Thank you again for your contribution and testing. I look forward to seeing your future thoughts on GitHub!
You must be logged in to reply to this review.