Usually they are in line 11-40. Final code shoud look like
from plogical.CyberCPLogFileWriter import CyberCPLogFileWriter as logging
import json
from django.shortcuts import HttpResponse
class secMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
uID = request.session['userID']
ipAddr = request.META.get('REMOTE_ADDR')
if request.method == 'POST':
try:
#logging.writeToFile(request.body)
data = json.loads(request.body)
for key, value in data.iteritems():
if request.path.find('gitNotify') > -1:
break
# if request.path.find('users') > -1 or request.path.find('firewall') > -1 or request.path.find('servicesAction') > -1 or request.path.find('sslForHostName') > -1:
# logging.writeToFile(request.body)
# final_dic = {'error_message': "Data supplied is not accepted.",
# "errorMessage": "Data supplied is not accepted."}
# final_json = json.dumps(final_dic)
# return HttpResponse(final_json)
if type(value) == str or type(value) == unicode:
pass
else:
continue
if request.build_absolute_uri().find('saveSpamAssassinConfigurations') > -1 or request.build_absolute_uri().find('docker') > -1 or request.build_absolute_uri().find('cloudAPI') > -1 or request.build_absolute_uri().find('filemanager') > -1 or request.build_absolute_uri().find('verifyLogin') > -1 or request.build_absolute_uri().find('submitUserCreation') > -1:
continue
if key == 'ports' or key == 'imageByPass' or key == 'passwordByPass' or key == 'cronCommand' or key == 'emailMessage' or key == 'configData' or key == 'rewriteRules' or key == 'modSecRules' or key == 'recordContentTXT' or key == 'SecAuditLogRelevantStatus' or key == 'fileContent':
continue
if value.find(';') > -1 or value.find('&&') > -1 or value.find('|') > -1 or value.find('...') > -1 \\
or value.find("`") > -1 or value.find("$") > -1 or value.find("(") > -1 or value.find(")") > -1 \\
or value.find("'") > -1 or value.find("[") > -1 or value.find("]") > -1 or value.find("{") > -1 or value.find("}") > -1\\
or value.find(":") > -1 or value.find("<") > -1 or value.find(">") > -1:
logging.writeToFile(request.body)
final_dic = {'error_message': "Data supplied is not accepted.",
"errorMessage": "Data supplied is not accepted."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
if key.find(';') > -1 or key.find('&&') > -1 or key.find('|') > -1 or key.find('...') > -1 \\
or key.find("`") > -1 or key.find("$") > -1 or key.find("(") > -1 or key.find(")") > -1 \\
or key.find("'") > -1 or key.find("[") > -1 or key.find("]") > -1 or key.find("{") > -1 or key.find("}") > -1\\
or key.find(":") > -1 or key.find("<") > -1 or key.find(">") > -1:
logging.writeToFile(request.body)
final_dic = {'error_message': "Data supplied is not accepted.", "errorMessage": "Data supplied is not accepted."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
except BaseException, msg:
logging.writeToFile(str(msg))
response = self.get_response(request)
return response
response = self.get_response(request)
return response
and this file is available at /usr/local/CyberCP/CyberCP
Actually, I coded an option you can enable or disable this within that file.
I do not have a dynamic session that changes to verify it that works, but the file works on my test server and has an if condition to only run if ‘true’ so in theory should work for you to toggle it off by setting value to ‘false’ without having to comment or delete lines in the core file which bound to be error-prone.
To set to On ‘true’
sed -i “s/^sessionIPValidation =.*/sessionIPValidation = ‘true’/g” /usr/local/CyberCP/CyberCP/secMiddleware.py
To set to Off: ‘false’
sed -i “s/^sessionIPValidation =.*/sessionIPValidation = ‘false’/g” /usr/local/CyberCP/CyberCP/secMiddleware.py
To check status:
grep -E ‘^sessionIPValidation’ /usr/local/CyberCP/CyberCP/secMiddleware.py
Example of this toggled to On(true): Default
root@ubuntu:~# grep -E ‘^sessionIPValidation’ /usr/local/CyberCP/CyberCP/secMiddleware.py
sessionIPValidation = ‘true’
root@ubuntu:~#
Example of this toggled to Off(false):
root@ubuntu:~# grep -E ‘^sessionIPValidation’ /usr/local/CyberCP/CyberCP/secMiddleware.py
sessionIPValidation = ‘false’
root@ubuntu:~#
After toggling:
systemctl restart lscpd||service lscpd restart
Test
If it works ill submit a pull request to have it merged to the stable branch.
@whattheserver : I just want to say thank you for your work on this. I can see you put a significant amount of time into helping out with this. It’s much appreciated.
If you want to do this by commenting out (or removing) lines, then pay attention to the fact that the relevant line numbers may change with each update.
I have the same issue using CloudFlare.
I can sometimes log in, and some times I get the error.
{“error_message”: “Session reuse detected, IPAddress logged.”, “errorMessage”: “Session reuse detected, IPAddress logged.”}
The tutorial over just ends up with internal error 500.
I have the same issue. I am also using CloudFlare.
After logging in I can browse 1-2 sites on cyberpanel, then I have to login again.
Everything works well when I log in with HTTP:: (only loading of each page takes much longer).
I only have the issue described above when I log in with HTTPS::.
For cloudflare users please replace REMOTE_ADDR with True-Client-IP and for nginx please replace REMOTE_ADDR with X_REAL_IP
your issue will be resolved no need to remove a single line and also no 500 error cheers
regards
Aditya Rathore World
@arworld said:
For cloudflare users please replace REMOTE_ADDR with True-Client-IP and for nginx please replace REMOTE_ADDR with X_REAL_IP
your issue will be resolved no need to remove a single line and also no 500 error cheers
regards
Aditya Rathore World
you can comment above line if using cloudflare as it have single header ip only
def call(self, request):
try:
uID = request.session[‘userID’]
admin = Administrator.objects.get(pk=uID)
ipAddr = request.META.get(‘True-Client-IP’)
if ipAddr.find('.') > -1:
if request.session['ipAddr'] == ipAddr or admin.securityLevel == secMiddleware.LOW:
pass
else:
del request.session['userID']
del request.session['ipAddr']
logging.writeToFile(request.META.get('True-Client-IP'))
final_dic = {'error_message': "Session reuse detected, IPAddress logged.",
"errorMessage": "Session reuse detected, IPAddress logged."}
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
else:
@arworld said:
For cloudflare users please replace REMOTE_ADDR with True-Client-IP and for nginx please replace REMOTE_ADDR with X_REAL_IP
your issue will be resolved no need to remove a single line and also no 500 error cheers
regards
Aditya Rathore World
Thank you @arworld for your help! This seems to work for me very well. So far I haven’t had any problems with the session reuse anymore!
Hi, I tried to bypass Cloudflare but the error is still persistent. I am facing a dilemma, upgrade and cannot access CP or leave it as Version 2.7 and leave myself vulnerable.
My IP is fixed.
Hoped I can get some help on this issue. Thanks you!