aboutsummaryrefslogtreecommitdiffstats
path: root/Mailman/Cgi/subscribe.py
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2019-06-10 17:29:24 +0200
committerRalf Jung <post@ralfj.de>2019-06-10 17:29:24 +0200
commitb7476d1c86053181cb38aa3acd3fc718fde55979 (patch)
tree9aa2c07ef0d77f857d5cbcfeacd19abeaa064840 /Mailman/Cgi/subscribe.py
parent56188e427f80ed350b6608ce47124402c90b9d40 (diff)
downloadmailman2-b7476d1c86053181cb38aa3acd3fc718fde55979.tar.gz
mailman2-b7476d1c86053181cb38aa3acd3fc718fde55979.tar.xz
mailman2-b7476d1c86053181cb38aa3acd3fc718fde55979.zip
implement a simple CAPTCHA scheme based on questions and answers configured by the site admin
Diffstat (limited to '')
-rw-r--r--Mailman/Cgi/subscribe.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/Mailman/Cgi/subscribe.py b/Mailman/Cgi/subscribe.py
index b6527a2a..7e7ebc61 100644
--- a/Mailman/Cgi/subscribe.py
+++ b/Mailman/Cgi/subscribe.py
@@ -168,13 +168,14 @@ def process_form(mlist, doc, cgidata, lang):
# for our hash so it doesn't matter.
remote1 = remote.rsplit(':', 1)[0]
try:
- ftime, fhash = cgidata.getfirst('sub_form_token', '').split(':')
+ ftime, fcaptcha_idx, fhash = cgidata.getfirst('sub_form_token', '').split(':')
then = int(ftime)
except ValueError:
- ftime = fhash = ''
+ ftime = fcaptcha_idx = fhash = ''
then = 0
token = Utils.sha_new(mm_cfg.SUBSCRIBE_FORM_SECRET + ":" +
ftime + ":" +
+ fcaptcha_idx + ":" +
mlist.internal_name() + ":" +
remote1).hexdigest()
if ftime and now - then > mm_cfg.FORM_LIFETIME:
@@ -189,6 +190,11 @@ def process_form(mlist, doc, cgidata, lang):
results.append(
_('There was no hidden token in your submission or it was corrupted.'))
results.append(_('You must GET the form before submitting it.'))
+ # Check captcha
+ if isinstance(mm_cfg.CAPTCHAS, dict):
+ captcha_answer = cgidata.getvalue('captcha_answer', '')
+ if not Utils.captcha_verify(fcaptcha_idx, captcha_answer, mm_cfg.CAPTCHAS):
+ results.append(_('This was not the right answer to the CAPTCHA question.'))
# Was an attempt made to subscribe the list to itself?
if email == mlist.GetListEmail():
syslog('mischief', 'Attempt to self subscribe %s: %s', email, remote)