digitalpoint
Well-known member
All done in Cloudflare.When you ban an IP address, does it store the IP address on the localhost or is it sent to CloudFlare for blocking?
Thank you
All done in Cloudflare.When you ban an IP address, does it store the IP address on the localhost or is it sent to CloudFlare for blocking?
Thank you
So, if I click ban on digitalpoint, your IP address is then sent to CloudFlare for banning (the "You've been blocked" page)?All done in Cloudflare.
And XF's:We use your information for making you an account on X and we will not share or release your information to any third parties without your consent.
XenForo Limited will not sell, distribute or lease your personal information to third parties unless we have your explicit permission or are required by law to do so.
Ya, if it violates your terms of service, you can alter your terms of service or not use that function. There isn’t a way to both use it and not alter your terms of service if that’s part of your terms.So, if I click ban on digitalpoint, your IP address is then sent to CloudFlare for banning (the "You've been blocked" page)?
This may be out of your domain, but would that violate this Privacy Policy:
And XF's:
As permission was not granted to release information? Should a section be added where we're allowed to send it to 3rd parties in the event of a ban, etc.?
Yeah, just checking t's and dotting i's. Wanted to make sure it was sending the IP to CloudFlare for blocking (releasing 3rd party information without consent) before having to rewrite the Privacy Policy/Terms of Service that it was, which would violate.Ya, if it violates your terms of service, you can alter your terms of service or not use that function. There isn’t a way to both use it and not alter your terms of service if that’s part of your terms.
Then why log IP addresses on your server if you're not going to send them back as a ban? It would only make sense if you saved the IP from a session from CloudFlare to your database, and then sent that back to CloudFlare for banning, that you would be in violation of the default terms because, although CF gave it to you, the user didn't give you permission to send it back.Although Cloudflare knows the user’s IP before you do. It’s technically Cloudflare telling you their IP. So you are only telling Cloudflare to block an IP they first told you about… I mean if you really want to get technical.
I'm not lawyer, but I suspect it could be interpreted different ways. If a third party gives you info about a user (or more specifically an HTTP request), I'm not entirely sure giving that info back to the source you got it from really would count as "disclosing" to a third party, especially if there's no user identifiable info. It was in fact that third party that gave you the info to start with.Then why log IP addresses on your server if you're not going to send them back as a ban? It would only make sense if you saved the IP from a session from CloudFlare to your database, and then sent that back to CloudFlare for banning, that you would be in violation of the default terms because, although CF gave it to you, the user didn't give you permission to send it back.
Recommendations for Legal Clarity
- To minimize ambiguity, it would be advisable to update the ToS/Privacy Policy explicitly stating that essential security or infrastructure service providers (such as CloudFlare) may receive limited user data strictly for operational purposes, including blocking access or preventing abuse.
- This provides greater transparency, enhancing compliance with data protection laws and mitigating potential legal risks.
The part that makes it murky is the default Privacy Policy stating:Ya… not saying don’t do it, but not something I’d care too much about personally. If the user doesn’t want their IP disclosed to third parties (including ones you have no relationship with), they need to not use IP addresses. An HTTP request (including IP address transients numerous routers and networks every time a request is made). And you are talking about disclosing it to the third party that gave it to you to begin with. If you are going to update your terms of service, what about you disclosing the IP address (by fulfilling the HTTP request) to numerous third party networks that weren’t the ones to give you the IP address to begin with?
I mean if you are really trying to cover yourself from every angle.![]()
It doesn't state that it can be used for abuse measures, such as sending it to CloudFlare for blocking purposes.We may collect non-personally identifiable information about you in the course of your interaction with our site. This information may include technical information about the browser or type of device you're using. This information will be used purely for the purposes of analytics and tracking the number of visitors to our site.
It also doesn’t say you are disclosing their IP address to any random network willing to route the HTTP request.The part that makes it murky is the default Privacy Policy stating:
It doesn't state that it can be used for abuse measures, such as sending it to CloudFlare for blocking purposes.
Just going to drop this in and update my Privacy Policy to reflect... Seems like it can violate various laws (including GDRP) if not explicit, even if the HTTP request came from CloudFlare.It also doesn’t say you are disclosing their IP address to any random network willing to route the HTTP request.
Like I said, you are worried about disclosing the IP to the third party that gave it to you to begin with. But you aren’t worried about disclosing the user’s IP address to random networks routing traffic? That seems like something more important to disclose than disclosing a bit of info to the entity that gave the info to you to begin with.
- Removed use of is_callable() (PHP 8.2+ compatibility change)
- Added Cloudflare setting: Security -> Bots -> AI Labyrinth
This might be a better fix:Ya, I missed it, sorry... in the src/addons/DigitalPoint\Cloudflare\XF\Template\Templater.php file, if you change this:
PHP:if ($ipObject === null && is_callable('parent::filterGeo'))
to this...
PHP:if ($ipObject === null && method_exists(get_parent_class($this), 'filterGeo'))
Hopefully that should fix it for you? Stupid is_callable().
if (... && is_callable([parent::class, 'filterGeo']))
parent::class
is supported from php 5.5+, and probably is nicer to use than get_parent_class($this)
Server error log
Error: Template public:member_ip_list error: Call to undefined method...
What version of PHP? I've not been able to replicate at, and honestly the code looks pretty simple... check if the parent method exists before it tries to call it (but for whatever reason your setup is saying the parent class exists when it doesn't).Error: Template admin:user_ip_list error: Call to undefined method XenSoluce\HideBbCode\XF\Template\Templater::filterGeo() src/addons/DigitalPoint/Cloudflare/XF/Template/Templater.php:41
Generated by: MentaL Mar 27, 2025 at 1:34 PM
Stack trace
#0 src/XF/Template/Templater.php(1186): DigitalPoint\Cloudflare\XF\Template\Templater->filterGeo(Object(SV\LazyImageLoader\XF\Template\Templater), [invalid], false)
#1 internal_data/code_cache/templates/l1/s0/admin/user_ip_list.php(28): XF\Template\Templater->filter([invalid], Array, false)
#2 src/XF/Template/Templater.php(1799): XF\Template\Templater->{closure:internal_data/code_cache/templates/l1/s0/admin/user_ip_list.php:4}(Object(SV\LazyImageLoader\XF\Template\Templater), Array, NULL)
#3 src/addons/MaZ/AMP/Traits/Templater/XF22.php(52): XF\Template\Templater->renderTemplate('user_ip_list', Array, true, NULL)
#4 src/addons/MaZ/AUN/XF/Template/Templater.php(39): MaZ\AMP\XF\Template\Templater->renderTemplate('admin:user_ip_l...', Array, true, NULL)
#5 src/XF/Template/Template.php(24): MaZ\AUN\XF\Template\Templater->renderTemplate('admin:user_ip_l...', Array)
#6 src/XF/Mvc/Renderer/Json.php(86): XF\Template\Template->render()
#7 src/XF/Mvc/Renderer/Json.php(70): XF\Mvc\Renderer\Json->renderHtmlFallback('XF:User\\IpList', 'admin:user_ip_l...', Array)
#8 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Json->renderView('XF:User\\IpList', 'admin:user_ip_l...', Array)
#9 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Json), Object(XF\Mvc\Reply\View))
#10 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Json), Object(XF\Mvc\Reply\View))
#11 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'json')
#12 src/XF/App.php(2826): XF\Mvc\Dispatcher->run()
#13 src/XF.php(806): XF\App->run()
#14 admin.php(15): XF::runApp('XF\\Admin\\App')
#15 {main}
Request state
array(4) {
["url"] => string(201) "/admin.php?users/domain.2000436353/user-ips&_xfResponseType=json&_xfWithData=1&_xfRequestUri=%2Fadmin.php%3Fusers%2Fdomain.2000436353%2Fedit&_xfToken=1743082490%2C037bc837a0a13ba6020f105850f8dbfe"
["referrer"] => string(68) "https://forum.domain.com/admin.php?users/domain.2000436353/edit"
["_GET"] => array(5) {
["users/domain_2000436353/user-ips"] => string(0) ""
["_xfResponseType"] => string(4) "json"
["_xfWithData"] => string(1) "1"
["_xfRequestUri"] => string(42) "/admin.php?users/domain.2000436353/edit"
["_xfToken"] => string(43) "1743082490,037bc837a0a13ba6020f105850f8dbfe"
}
["_POST"] => array(0) {
}
}
Fixes an issue where if you have other addons that extend theXF\Templater
class, with an execution order higher than 1000, and you are trying to view IP addresses that were logged without an associated geo-location record for that IP.
You of course were correct... not just "nicer", but turns out, actually necessary because of how XenForo's class extension/execution order system works.This might be a better fix:
PHP:if (... && is_callable([parent::class, 'filterGeo']))
parent::class
is supported from php 5.5+, and probably is nicer to use thanget_parent_class($this)
get_parent_class($this)
to give you the parent class. We use essential cookies to make this site work, and optional cookies to enhance your experience.