Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.37.3

Version Description

2016-03-10 = * Fixed bug with broken MailPoet previews. * Fixed bug with broken Geo My WP pop-up windows. * Fixed issue with mb_convert_encoding() function. * Removed double JavaScript code in front-end. * Removed unused variables in anti spam logic. * Added option 'Set cookies' (turned on by default). If the option turned off, the plugin will not generate cookies, but in this case plugin will not protect some rarely used contact forms. Any way, turn this option off be compatible with Varnish in spam protection for WordPress core comments, registrations and most popular contact forms. * Added spam protection for Gravity forms via option 'Contact forms' with hook gform_entry_is_spam().

Download this release

Release Info

Developer shagimuratov
Plugin Icon 128x128 Spam protection, AntiSpam, FireWall by CleanTalk
Version 5.37.3
Comparing to
See all releases

Code changes from version 5.36.1 to 5.37.3

cleantalk.php CHANGED
@@ -3,11 +3,12 @@
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: http://cleantalk.org
5
  Description: Max power, all-in-one, captcha less, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
- Version: 5.36.1
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
- $cleantalk_plugin_version='5.36.1';
 
11
  $cleantalk_executed=false;
12
 
13
  if(defined('CLEANTALK_AJAX_USE_BUFFER'))
@@ -341,21 +342,39 @@ function ct_add_nocache_script_footer()
341
  }
342
  }
343
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  function ct_add_nocache_script_header()
345
  {
346
  if(strpos($_SERVER['REQUEST_URI'],'jm-ajax')===false)
347
  {
348
- global $ct_options;
349
- $ct_options=ct_get_options();
350
- if(@intval($ct_options['collect_details'])==1)
351
- {
352
- $ct_info_flag="var ct_info_flag=true;\n";
353
- }
354
- else
355
- {
356
- $ct_info_flag="var ct_info_flag=false;\n";
357
- }
358
-
359
  print "\n<script type='text/javascript'>\nvar ct_ajaxurl = '".admin_url('admin-ajax.php')."';\n $ct_info_flag </script>\n";
360
  }
361
  }
@@ -365,16 +384,10 @@ function ct_inject_nocache_script($html)
365
  if(strpos($_SERVER['REQUEST_URI'],'jm-ajax')===false)
366
  {
367
  global $test_external_forms, $cleantalk_plugin_version, $ct_options;
368
- $ct_options=ct_get_options();
369
- if(@intval($ct_options['collect_details'])==1)
370
- {
371
- $ct_info_flag="var ct_info_flag=true;\n";
372
- }
373
- else
374
- {
375
- $ct_info_flag="var ct_info_flag=false;\n";
376
- }
377
- if(!is_admin()&&stripos($html,"</body")!==false)
378
  {
379
  //$ct_replace.="\n<script type='text/javascript'>var ajaxurl = '".admin_url('admin-ajax.php')."';\n $ct_info_flag </script>\n";
380
  $ct_replace="<script async type='text/javascript' src='".plugins_url( '/inc/cleantalk_nocache.js' , __FILE__ )."?random=".$cleantalk_plugin_version."'></script>\n";
@@ -387,11 +400,6 @@ function ct_inject_nocache_script($html)
387
  //$html=str_ireplace("</body",$ct_replace."</body",$html);
388
  $html=substr_replace($html,$ct_replace."</body",strripos($html,"</body"),6);
389
  }
390
- if(!is_admin()&&preg_match("#<head[^>]*>#i",$html)==1)
391
- {
392
- $ct_replace="\n<script type='text/javascript'>\nvar ct_ajaxurl = '".admin_url('admin-ajax.php')."';\n $ct_info_flag </script>\n";
393
- $html=preg_replace("(<head[^>]*>)","$0".$ct_replace,$html,1);
394
- }
395
  }
396
  return $html;
397
  }
@@ -504,4 +512,4 @@ function ct_send_sfw_log()
504
  $sfw = new CleanTalkSFW();
505
  $sfw->send_logs();
506
  }
507
- ?>
3
  Plugin Name: Anti-Spam by CleanTalk
4
  Plugin URI: http://cleantalk.org
5
  Description: Max power, all-in-one, captcha less, premium anti-spam plugin. No comment spam, no registration spam, no contact spam, protects any WordPress forms.
6
+ Version: 5.37.3
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
+ $cleantalk_plugin_version='5.37.3';
11
+ $ct_agent_version = 'wordpress-5373';
12
  $cleantalk_executed=false;
13
 
14
  if(defined('CLEANTALK_AJAX_USE_BUFFER'))
342
  }
343
  }
344
 
345
+ /**
346
+ * Function prepares values to manage JavaScript code
347
+ * @return string
348
+ */
349
+ function ct_set_info_flag () {
350
+ global $ct_options;
351
+
352
+ $ct_options=ct_get_options();
353
+
354
+ $result = 'false';
355
+ if(@intval($ct_options['collect_details'])==1
356
+ && @intval($ct_options['set_cookies']) == 1
357
+ ) {
358
+ $result = 'true';
359
+ }
360
+
361
+ $ct_info_flag = "var ct_info_flag=$result;\n";
362
+
363
+ $result = 'true';
364
+ if (@intval($ct_options['set_cookies']) == 0) {
365
+ $result = 'false';
366
+ }
367
+
368
+ $ct_set_cookies_flag = "var ct_set_cookies_flag=$result;\n";
369
+
370
+ return $ct_info_flag . $ct_set_cookies_flag;
371
+ }
372
+
373
  function ct_add_nocache_script_header()
374
  {
375
  if(strpos($_SERVER['REQUEST_URI'],'jm-ajax')===false)
376
  {
377
+ $ct_info_flag = ct_set_info_flag();
 
 
 
 
 
 
 
 
 
 
378
  print "\n<script type='text/javascript'>\nvar ct_ajaxurl = '".admin_url('admin-ajax.php')."';\n $ct_info_flag </script>\n";
379
  }
380
  }
384
  if(strpos($_SERVER['REQUEST_URI'],'jm-ajax')===false)
385
  {
386
  global $test_external_forms, $cleantalk_plugin_version, $ct_options;
387
+
388
+ $ct_info_flag = ct_set_info_flag();
389
+
390
+ if(!is_admin()&&stripos($html,"</body")!==false)
 
 
 
 
 
 
391
  {
392
  //$ct_replace.="\n<script type='text/javascript'>var ajaxurl = '".admin_url('admin-ajax.php')."';\n $ct_info_flag </script>\n";
393
  $ct_replace="<script async type='text/javascript' src='".plugins_url( '/inc/cleantalk_nocache.js' , __FILE__ )."?random=".$cleantalk_plugin_version."'></script>\n";
400
  //$html=str_ireplace("</body",$ct_replace."</body",$html);
401
  $html=substr_replace($html,$ct_replace."</body",strripos($html,"</body"),6);
402
  }
 
 
 
 
 
403
  }
404
  return $html;
405
  }
512
  $sfw = new CleanTalkSFW();
513
  $sfw->send_logs();
514
  }
515
+ ?>
cleantalk_nocache.js DELETED
@@ -1,133 +0,0 @@
1
- function sendRequest(url,callback,postData) {
2
- var req = createXMLHTTPObject();
3
- if (!req) return;
4
- var method = (postData) ? "POST" : "GET";
5
- req.open(method,url,true);
6
- if (postData)
7
- req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
8
- req.onreadystatechange = function () {
9
- if (req.readyState != 4) return;
10
- if (req.status != 200 && req.status != 304) {
11
- // alert('HTTP error ' + req.status);
12
- return;
13
- }
14
- callback(req);
15
- };
16
- if (req.readyState == 4) return;
17
- req.send(postData);
18
- }
19
-
20
- var XMLHttpFactories = [
21
- function () {return new XMLHttpRequest()},
22
- function () {return new ActiveXObject("Msxml2.XMLHTTP")},
23
- function () {return new ActiveXObject("Msxml3.XMLHTTP")},
24
- function () {return new ActiveXObject("Microsoft.XMLHTTP")}
25
- ];
26
-
27
- function createXMLHTTPObject() {
28
- var xmlhttp = false;
29
- for (var i=0;i<XMLHttpFactories.length;i++) {
30
- try {
31
- xmlhttp = XMLHttpFactories[i]();
32
- }
33
- catch (e) {
34
- continue;
35
- }
36
- break;
37
- }
38
- return xmlhttp;
39
- }
40
-
41
- function ct_getCookie(name) {
42
- var matches = document.cookie.match(new RegExp(
43
- "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
44
- ));
45
- return matches ? decodeURIComponent(matches[1]) : undefined;
46
- }
47
-
48
- function ct_setCookie(name, value)
49
- {
50
- /*var domain=location.hostname;
51
- tmp=domain.split('.');
52
- if(tmp[0].toLowerCase()=='www')
53
- {
54
- tmp[0]='';
55
- }
56
- else
57
- {
58
- tmp[0]='.'+tmp[0];
59
- }
60
- domain=tmp.join('.');*/
61
-
62
- document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /";
63
- document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT";
64
- //document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /; domain = " + domain;
65
-
66
- var date = new Date;
67
- date.setDate(date.getDate() + 1);
68
- //setTimeout(function() { document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /; domain = " + domain}, 500)
69
- setTimeout(function() { document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /;"}, 500);
70
- //document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /;";
71
- }
72
-
73
- function ct_callback(req)
74
- {
75
- ct_cookie=req.responseText.trim();
76
- //alert('Key value: ' + ct_cookie);
77
-
78
- ct_setCookie('ct_checkjs', ct_cookie);
79
-
80
- for(i=0;i<document.forms.length;i++)
81
- {
82
- f=document.forms[i];
83
- for(j=0;j<f.elements.length;j++)
84
- {
85
- e=f.elements[j];
86
- if(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)
87
- {
88
- e.value=ct_cookie;
89
- //alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);
90
- }
91
- }
92
- }
93
-
94
- //alert('Set cookie: \n' + document.cookie);
95
- }
96
-
97
- if (!Date.now) {
98
- Date.now = function() { return new Date().getTime(); }
99
- }
100
-
101
- if(ct_nocache_executed==undefined)
102
- {
103
- var ct_nocache_executed=true;
104
- var new_timestamp=Math.floor(Date.now() / 1000);
105
-
106
- var old_timestamp=ct_getCookie('ct_timestamp');
107
-
108
- var checkjs_cookie=ct_getCookie('ct_checkjs');
109
-
110
- if(checkjs_cookie!=undefined)
111
- {
112
- for(i=0;i<document.forms.length;i++)
113
- {
114
- f=document.forms[i];
115
- for(j=0;j<f.elements.length;j++)
116
- {
117
- e=f.elements[j];
118
- if(e.name!==undefined&&e.name.indexOf('ct_checkjs')!=-1)
119
- {
120
- e.value=checkjs_cookie;
121
- //alert('Form #' + i + ', field ' + e.name + ' = ' + ct_cookie);
122
- }
123
- }
124
- }
125
- }
126
-
127
- if(old_timestamp==undefined||new_timestamp-old_timestamp>86400||checkjs_cookie==undefined) //86400 is 24 hours
128
- {
129
- ct_setCookie('ct_timestamp', new_timestamp);
130
- //alert('set!');
131
- sendRequest(ct_ajaxurl+'?'+Math.random(),ct_callback,'action=ct_get_cookie');
132
- }
133
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/cleantalk-admin.php CHANGED
@@ -50,8 +50,10 @@ $ct_server_timeout = 10;
50
  /**
51
  * Admin action 'admin_print_footer_scripts' - Enqueue admin script for checking if timezone offset is saved in settings
52
  */
53
-
54
- add_action( 'admin_print_footer_scripts', 'ct_add_stats_js' );
 
 
55
 
56
  function ct_add_stats_js()
57
  {
@@ -408,9 +410,10 @@ function ct_admin_init()
408
  add_settings_field('cleantalk_use_ajax', __('Use AJAX for JavaScript check', 'cleantalk'), 'ct_input_use_ajax', 'cleantalk', 'cleantalk_settings_anti_spam');
409
  add_settings_field('cleantalk_check_external', __('Protect external forms', 'cleantalk'), 'ct_input_check_external', 'cleantalk', 'cleantalk_settings_anti_spam');
410
  add_settings_field('cleantalk_check_comments_number', __("Don't check comments", 'cleantalk'), 'ct_input_check_comments_number', 'cleantalk', 'cleantalk_settings_anti_spam');
 
411
  //add_settings_field('cleantalk_check_messages_number', __("Don't check messages", 'cleantalk'), 'ct_input_check_messages_number', 'cleantalk', 'cleantalk_settings_anti_spam');
412
  add_settings_field('cleantalk_spam_firewall', __('', 'cleantalk'), 'ct_input_spam_firewall', 'cleantalk', 'cleantalk_settings_banner');
413
- add_settings_field('cleantalk_collect_details', __('Collect details about browsers', 'cleantalk'), 'ct_input_collect_details', 'cleantalk', 'cleantalk_settings_banner');
414
  add_settings_field('cleantalk_show_link', __('', 'cleantalk'), 'ct_input_show_link', 'cleantalk', 'cleantalk_settings_banner');
415
  }
416
  }
@@ -898,6 +901,26 @@ function ct_input_check_external() {
898
  @admin_addDescriptionsFields(sprintf(__('', 'cleantalk'), $ct_options['check_external']));
899
  }
900
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
901
  function ct_input_show_link() {
902
  global $ct_options, $ct_data;
903
 
@@ -1425,4 +1448,4 @@ function ct_unmark_red($message) {
1425
  return $message;
1426
  }
1427
 
1428
- ?>
50
  /**
51
  * Admin action 'admin_print_footer_scripts' - Enqueue admin script for checking if timezone offset is saved in settings
52
  */
53
+ if(isset($ct_options['show_adminbar']) && @intval($ct_options['show_adminbar']) == 1)
54
+ {
55
+ add_action( 'admin_print_footer_scripts', 'ct_add_stats_js' );
56
+ }
57
 
58
  function ct_add_stats_js()
59
  {
410
  add_settings_field('cleantalk_use_ajax', __('Use AJAX for JavaScript check', 'cleantalk'), 'ct_input_use_ajax', 'cleantalk', 'cleantalk_settings_anti_spam');
411
  add_settings_field('cleantalk_check_external', __('Protect external forms', 'cleantalk'), 'ct_input_check_external', 'cleantalk', 'cleantalk_settings_anti_spam');
412
  add_settings_field('cleantalk_check_comments_number', __("Don't check comments", 'cleantalk'), 'ct_input_check_comments_number', 'cleantalk', 'cleantalk_settings_anti_spam');
413
+ add_settings_field('cleantalk_set_cookies', __("Set cookies", 'cleantalk'), 'ct_input_set_cookies', 'cleantalk', 'cleantalk_settings_anti_spam');
414
  //add_settings_field('cleantalk_check_messages_number', __("Don't check messages", 'cleantalk'), 'ct_input_check_messages_number', 'cleantalk', 'cleantalk_settings_anti_spam');
415
  add_settings_field('cleantalk_spam_firewall', __('', 'cleantalk'), 'ct_input_spam_firewall', 'cleantalk', 'cleantalk_settings_banner');
416
+ add_settings_field('cleantalk_collect_details', __('Collect details about browsers', 'cleantalk'), 'ct_input_collect_details', 'cleantalk', 'cleantalk_settings_anti_spam');
417
  add_settings_field('cleantalk_show_link', __('', 'cleantalk'), 'ct_input_show_link', 'cleantalk', 'cleantalk_settings_banner');
418
  }
419
  }
901
  @admin_addDescriptionsFields(sprintf(__('', 'cleantalk'), $ct_options['check_external']));
902
  }
903
 
904
+ function ct_input_set_cookies() {
905
+ global $ct_options, $ct_data;
906
+
907
+ $ct_options = ct_get_options();
908
+ $ct_data = ct_get_data();
909
+
910
+ if(isset($ct_options['set_cookies']))
911
+ {
912
+ $value = @intval($ct_options['set_cookies']);
913
+ }
914
+ else
915
+ {
916
+ $value=0;
917
+ }
918
+ echo "<input type='radio' id='cleantalk_set_cookies1' name='cleantalk_settings[set_cookies]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='cleantalk_set_cookies1'> " . __('Yes') . "</label>";
919
+ echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
920
+ echo "<input type='radio' id='cleantalk_set_cookies0' name='cleantalk_settings[set_cookies]' value='0' " . ($value == '0' ? 'checked' : '') . " /><label for='cleantalk_set_cookies0'> " . __('No') . "</label>";
921
+ @admin_addDescriptionsFields(sprintf(__('Turn this option off to deny plugin generates any cookies on website fronentd. This option is helpfull if you use Varnish. But most of contact forms will not be protected by CleanTalk if the option is turnded off!', 'cleantalk')));
922
+ }
923
+
924
  function ct_input_show_link() {
925
  global $ct_options, $ct_data;
926
 
1448
  return $message;
1449
  }
1450
 
1451
+ ?>
inc/cleantalk-ajax.php CHANGED
@@ -317,15 +317,35 @@ function ct_get_fields(&$email,&$message,$arr)
317
  function ct_ajax_hook()
318
  {
319
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
320
- global $ct_agent_version, $ct_checkjs_register_form, $ct_session_request_id_label, $ct_session_register_ok_label, $bp, $ct_signup_done, $ct_formtime_label, $ct_negative_comment, $ct_options, $ct_data;
321
 
322
  $ct_options = ct_get_options();
323
  $ct_data = ct_get_data();
324
-
325
  $sender_email = null;
326
  $message = '';
327
  $nickname=null;
328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  if(isset($_POST['user_login']))
330
  {
331
  $nickname=$_POST['user_login'];
@@ -359,10 +379,8 @@ function ct_ajax_hook()
359
  $_POST['target']=$tmp;
360
  }
361
 
362
-
363
  if($sender_email!=null)
364
  {
365
- $checkjs = js_test('ct_checkjs', $_COOKIE, true);
366
  $submit_time = submit_time_test();
367
  $sender_info = get_sender_info();
368
  $sender_info['post_checkjs_passed']=$checkjs;
@@ -482,4 +500,4 @@ function ct_ajax_hook()
482
  }
483
  }
484
 
485
- ?>
317
  function ct_ajax_hook()
318
  {
319
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
320
+ global $ct_agent_version, $ct_checkjs_register_form, $ct_session_request_id_label, $ct_session_register_ok_label, $bp, $ct_signup_done, $ct_formtime_label, $ct_negative_comment, $ct_options, $ct_data, $current_user;
321
 
322
  $ct_options = ct_get_options();
323
  $ct_data = ct_get_data();
 
324
  $sender_email = null;
325
  $message = '';
326
  $nickname=null;
327
 
328
+ //
329
+ // Go out because we call it on backend.
330
+ //
331
+ if (ct_is_user_enable() === false || (function_exists('get_current_user_id') && get_current_user_id() != 0)) {
332
+ return false;
333
+ }
334
+
335
+ //
336
+ // Go out because of not spam data
337
+ //
338
+ $gmw_actions = array(
339
+ 'gmaps_display_info_window',
340
+ 'gmw_ps_display_info_window'
341
+ );
342
+ $checkjs = js_test('ct_checkjs', $_COOKIE, true);
343
+ if ($checkjs && // Spammers usually fail the JS test
344
+ (isset($_POST['action']) && in_array($_POST['action'], $gmw_actions)) // Geo My WP pop-up windows.
345
+ ) {
346
+ return false;
347
+ }
348
+
349
  if(isset($_POST['user_login']))
350
  {
351
  $nickname=$_POST['user_login'];
379
  $_POST['target']=$tmp;
380
  }
381
 
 
382
  if($sender_email!=null)
383
  {
 
384
  $submit_time = submit_time_test();
385
  $sender_info = get_sender_info();
386
  $sender_info['post_checkjs_passed']=$checkjs;
500
  }
501
  }
502
 
503
+ ?>
inc/cleantalk-common.php CHANGED
@@ -1,6 +1,5 @@
1
  <?php
2
 
3
- $ct_agent_version = 'wordpress-5361';
4
  $ct_plugin_name = 'Anti-spam by CleanTalk';
5
  $ct_checkjs_frm = 'ct_checkjs_frm';
6
  $ct_checkjs_register_form = 'ct_checkjs_register_form';
@@ -132,7 +131,7 @@ function ct_init_session() {
132
  */
133
  function ct_base_call($params = array()) {
134
  global $wpdb, $ct_agent_version, $ct_formtime_label, $ct_options, $ct_data;
135
-
136
  $ct_options=ct_get_options();
137
  $ct_data=ct_get_data();
138
 
@@ -178,7 +177,6 @@ function ct_base_call($params = array()) {
178
  $ct_request->last_error_text=$ct_data['last_error_text'];
179
  }
180
 
181
-
182
 
183
  $ct_result = @$ct->isAllowMessage($ct_request);
184
  if ($ct->server_change) {
@@ -216,11 +214,6 @@ function ct_base_call($params = array()) {
216
  else
217
  {
218
  ct_add_event('yes');
219
- /*if($is_logged_in)
220
- {
221
- $user_cnt++;
222
- update_user_meta( $user_id, 'cleantalk_messages_number', $user_cnt);
223
- }*/
224
  }
225
  return array('ct' => $ct, 'ct_result' => $ct_result);
226
  }
@@ -247,7 +240,7 @@ function submit_time_test() {
247
  * @return array
248
  */
249
  function get_sender_info() {
250
- global $ct_direct_post, $ct_options, $ct_data;
251
 
252
  $ct_options = ct_get_options();
253
  $ct_data = ct_get_data();
@@ -270,36 +263,14 @@ function get_sender_info() {
270
  }
271
  }
272
 
273
- /*$options2server = array( // Options for sending to server for support information
274
- 'apikey' => $ct_options['apikey'],
275
- 'registrations_test' => $ct_options['registrations_test'],
276
- 'comments_test' => $ct_options['comments_test'],
277
- 'contact_forms_test' => $ct_options['contact_forms_test'],
278
- 'general_contact_forms_test' => $ct_options['general_contact_forms_test'],
279
- 'remove_old_spam' => $ct_options['remove_old_spam'],
280
- 'autoPubRevelantMess' => $ct_options['autoPubRevelantMess'],
281
- 'spam_store_days' => $ct_options['spam_store_days'],
282
- 'ssl_on' => $ct_options['ssl_on'],
283
- );*/
284
  $options2server=$ct_options;
285
  $js_info='';
286
- if(isset($_COOKIE['ct_user_info']))
287
  {
288
  $js_info=stripslashes(rawurldecode($_COOKIE['ct_user_info']));
289
  $js_info=mb_convert_encoding($js_info, "UTF-8", "Windows-1252");
290
  }
291
 
292
- if (isset($_COOKIE['ct_first_referer']))
293
- {
294
- $ct_first_referer = $_COOKIE['ct_first_referer'];
295
- }
296
- else
297
- {
298
- $ct_first_referer = 'null';
299
- }
300
- //$post_id=url_to_postid($_SERVER['HTTP_ORIGIN'].@$_SERVER['REQUEST_URI']);
301
- //$post_type=get_post_type($post_id);
302
-
303
  return $sender_info = array(
304
  'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
305
  'cms_lang' => substr(get_locale(), 0, 2),
@@ -313,8 +284,6 @@ function get_sender_info() {
313
  'ct_options' => json_encode($options2server),
314
  'fields_number' => sizeof($_POST),
315
  'js_info' => $js_info,
316
- 'ct_first_referer' => $ct_first_referer,
317
- //'post_type' => $post_type,
318
  );
319
  }
320
 
@@ -323,6 +292,8 @@ function get_sender_info() {
323
  * @return null|0|1;
324
  */
325
  function ct_cookies_test ($test = false) {
 
 
326
  $cookie_label = 'ct_cookies_test';
327
  $secret_hash = ct_get_checkjs_value();
328
 
@@ -334,7 +305,12 @@ function ct_cookies_test ($test = false) {
334
  $result = 0;
335
  }
336
  } else {
337
- @setcookie($cookie_label, $secret_hash, 0, '/');
 
 
 
 
 
338
 
339
  if ($test) {
340
  $result = 0;
@@ -439,7 +415,8 @@ function ct_def_options() {
439
  'ssl_on' => 0, // Secure connection to servers
440
  'relevance_test' => 0, // Test comment for relevance
441
  'notice_api_errors' => 0, // Send API error notices to WP admin
442
- 'user_token'=>'' //user token for auto login into spam statistics
 
443
  );
444
  }
445
 
@@ -801,4 +778,4 @@ function cleantalk_debug($key,$value)
801
  @header($key.": ".$value);
802
  }
803
  }
804
- ?>
1
  <?php
2
 
 
3
  $ct_plugin_name = 'Anti-spam by CleanTalk';
4
  $ct_checkjs_frm = 'ct_checkjs_frm';
5
  $ct_checkjs_register_form = 'ct_checkjs_register_form';
131
  */
132
  function ct_base_call($params = array()) {
133
  global $wpdb, $ct_agent_version, $ct_formtime_label, $ct_options, $ct_data;
134
+
135
  $ct_options=ct_get_options();
136
  $ct_data=ct_get_data();
137
 
177
  $ct_request->last_error_text=$ct_data['last_error_text'];
178
  }
179
 
 
180
 
181
  $ct_result = @$ct->isAllowMessage($ct_request);
182
  if ($ct->server_change) {
214
  else
215
  {
216
  ct_add_event('yes');
 
 
 
 
 
217
  }
218
  return array('ct' => $ct, 'ct_result' => $ct_result);
219
  }
240
  * @return array
241
  */
242
  function get_sender_info() {
243
+ global $ct_direct_post, $ct_options, $ct_data, $wp_rewrite;
244
 
245
  $ct_options = ct_get_options();
246
  $ct_data = ct_get_data();
263
  }
264
  }
265
 
 
 
 
 
 
 
 
 
 
 
 
266
  $options2server=$ct_options;
267
  $js_info='';
268
+ if(isset($_COOKIE['ct_user_info']) && function_exists('mb_convert_encoding'))
269
  {
270
  $js_info=stripslashes(rawurldecode($_COOKIE['ct_user_info']));
271
  $js_info=mb_convert_encoding($js_info, "UTF-8", "Windows-1252");
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
274
  return $sender_info = array(
275
  'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
276
  'cms_lang' => substr(get_locale(), 0, 2),
284
  'ct_options' => json_encode($options2server),
285
  'fields_number' => sizeof($_POST),
286
  'js_info' => $js_info,
 
 
287
  );
288
  }
289
 
292
  * @return null|0|1;
293
  */
294
  function ct_cookies_test ($test = false) {
295
+ $ct_options = ct_get_options();
296
+
297
  $cookie_label = 'ct_cookies_test';
298
  $secret_hash = ct_get_checkjs_value();
299
 
305
  $result = 0;
306
  }
307
  } else {
308
+ //
309
+ // Do not generate if admin turned off the cookies.
310
+ //
311
+ if (isset($ct_options['set_cookies']) && $ct_options['set_cookies'] == 1) {
312
+ @setcookie($cookie_label, $secret_hash, 0, '/');
313
+ }
314
 
315
  if ($test) {
316
  $result = 0;
415
  'ssl_on' => 0, // Secure connection to servers
416
  'relevance_test' => 0, // Test comment for relevance
417
  'notice_api_errors' => 0, // Send API error notices to WP admin
418
+ 'user_token'=>'', //user token for auto login into spam statistics
419
+ 'set_cookies'=> 1 // Disable cookies generatation to be compatible with Varnish.
420
  );
421
  }
422
 
778
  @header($key.": ".$value);
779
  }
780
  }
781
+ ?>
inc/cleantalk-public.php CHANGED
@@ -5,23 +5,11 @@
5
  * @return mixed[] Array of options
6
  */
7
  function ct_init() {
8
- global $ct_wplp_result_label, $ct_jp_comments, $ct_post_data_label, $ct_post_data_authnet_label, $ct_formtime_label, $ct_direct_post, $ct_options, $ct_data, $ct_check_post_result, $test_external_forms;
9
 
10
  $ct_options=ct_get_options();
11
  $ct_data=ct_get_data();
12
 
13
- if(!isset($_COOKIE['ct_first_referer']))
14
- {
15
- if(isset($_SERVER['HTTP_REFERER']))
16
- {
17
- setcookie("ct_first_referer", $_SERVER['HTTP_REFERER'], 0, '/');
18
- }
19
- else
20
- {
21
- setcookie("ct_first_referer", "null", 0, '/');
22
- }
23
- }
24
-
25
  //fix for EPM registration form
26
  if(isset($_POST) && isset($_POST['reg_email']) && shortcode_exists( 'epm_registration_form' ))
27
  {
@@ -167,8 +155,6 @@ function ct_init() {
167
  ct_s2member_registration_test();
168
  }
169
 
170
-
171
-
172
  //
173
  // New user approve hack
174
  // https://wordpress.org/plugins/new-user-approve/
@@ -177,6 +163,13 @@ function ct_init() {
177
  add_action('register_post', 'ct_register_post', 1, 3);
178
  }
179
 
 
 
 
 
 
 
 
180
  //
181
  // Load JS code to website footer
182
  //
@@ -279,7 +272,7 @@ function ct_add_hidden_fields($random_key = false, $field_name = 'ct_checkjs', $
279
  $ct_checkjs_key = ct_get_checkjs_value($random_key);
280
  $field_id_hash = md5(rand(0, 1000));
281
 
282
- if ($cookie_check) {
283
  $html = '
284
  <script type="text/javascript">
285
  function ctSetCookie(c_name, value, def_value) {
@@ -527,7 +520,6 @@ function ct_preprocess_comment($comment) {
527
  if (($comment['comment_type']!='trackback') && (ct_is_user_enable() === false || $ct_options['comments_test'] == 0 || $ct_comment_done || (isset($_SERVER['HTTP_REFERER']) && stripos($_SERVER['HTTP_REFERER'],'page=wysija_campaigns&action=editTemplate')!==false) || $is_max_comments || strpos($_SERVER['REQUEST_URI'],'/wp-admin/')!==false)) {
528
  return $comment;
529
  }
530
-
531
 
532
  $local_blacklists = wp_blacklist_check(
533
  $comment['comment_author'],
@@ -1638,6 +1630,71 @@ function ct_check_wplp(){
1638
  ct_die_extended($cleantalk_comment);
1639
  }
1640
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1641
  /**
1642
  * Test S2member registration
1643
  * @return array with errors
@@ -1781,11 +1838,12 @@ function ct_contact_form_validate () {
1781
  isset($_POST['bbp_reply_content']) ||
1782
  isset($_COOKIE[LOGGED_IN_COOKIE]) ||
1783
  isset($_POST['fscf_submitted']) ||
1784
- strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false
 
1785
  ) {
1786
  return null;
1787
  }
1788
-
1789
  //@header("CtConditions: Passed");
1790
  cleantalk_debug("CtConditions", "Passed");
1791
 
@@ -1836,10 +1894,11 @@ function ct_contact_form_validate () {
1836
  $tmp=$_POST['TellAFriend_Link'];
1837
  unset($_POST['TellAFriend_Link']);
1838
  }
1839
-
1840
  //@header("CtBaseCallBefore: 1");
1841
  cleantalk_debug("CtBaseCallBefore", "1");
1842
 
 
1843
  $ct_base_call_result = ct_base_call(array(
1844
  'message' => $subject . "\n\n" . $message,
1845
  'example' => null,
@@ -1849,9 +1908,10 @@ function ct_contact_form_validate () {
1849
  'sender_info' => get_sender_info(),
1850
  'checkjs' => $checkjs
1851
  ));
 
1852
  //@header("CtBaseCall: Executed");
1853
  cleantalk_debug("CtBaseCall", "Executed");
1854
-
1855
  if(isset($_POST['TellAFriend_Link']))
1856
  {
1857
  $_POST['TellAFriend_Link']=$tmp;
@@ -1945,6 +2005,7 @@ function ct_contact_form_validate_postdata () {
1945
  isset($_POST['bbp_topic_content']) ||
1946
  isset($_POST['bbp_reply_content']) ||
1947
  isset($_POST['fscf_submitted']) ||
 
1948
  strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false
1949
  ) {
1950
  return null;
@@ -2086,4 +2147,4 @@ function ct_print_form($arr,$k)
2086
  }
2087
  }
2088
 
2089
- ?>
5
  * @return mixed[] Array of options
6
  */
7
  function ct_init() {
8
+ global $ct_wplp_result_label, $ct_jp_comments, $ct_post_data_label, $ct_post_data_authnet_label, $ct_formtime_label, $ct_direct_post, $ct_options, $ct_data, $ct_check_post_result, $test_external_forms, $cleantalk_executed;
9
 
10
  $ct_options=ct_get_options();
11
  $ct_data=ct_get_data();
12
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  //fix for EPM registration form
14
  if(isset($_POST) && isset($_POST['reg_email']) && shortcode_exists( 'epm_registration_form' ))
15
  {
155
  ct_s2member_registration_test();
156
  }
157
 
 
 
158
  //
159
  // New user approve hack
160
  // https://wordpress.org/plugins/new-user-approve/
163
  add_action('register_post', 'ct_register_post', 1, 3);
164
  }
165
 
166
+ //
167
+ // Gravity forms
168
+ //
169
+ if (defined('GF_MIN_WP_VERSION')) {
170
+ add_filter('gform_entry_is_spam', 'ct_gforms_spam_test', 1, 3);
171
+ }
172
+
173
  //
174
  // Load JS code to website footer
175
  //
272
  $ct_checkjs_key = ct_get_checkjs_value($random_key);
273
  $field_id_hash = md5(rand(0, 1000));
274
 
275
+ if ($cookie_check && isset($ct_options['set_cookies']) && $ct_options['set_cookies'] == 1) {
276
  $html = '
277
  <script type="text/javascript">
278
  function ctSetCookie(c_name, value, def_value) {
520
  if (($comment['comment_type']!='trackback') && (ct_is_user_enable() === false || $ct_options['comments_test'] == 0 || $ct_comment_done || (isset($_SERVER['HTTP_REFERER']) && stripos($_SERVER['HTTP_REFERER'],'page=wysija_campaigns&action=editTemplate')!==false) || $is_max_comments || strpos($_SERVER['REQUEST_URI'],'/wp-admin/')!==false)) {
521
  return $comment;
522
  }
 
523
 
524
  $local_blacklists = wp_blacklist_check(
525
  $comment['comment_author'],
1630
  ct_die_extended($cleantalk_comment);
1631
  }
1632
 
1633
+ /**
1634
+ * Gravity forms anti-spam test.
1635
+ * @return boolean
1636
+ */
1637
+ function ct_gforms_spam_test ($is_spam, $form, $entry) {
1638
+ global $ct_options, $ct_data, $cleantalk_executed;
1639
+
1640
+ $ct_options = ct_get_options();
1641
+ $ct_data = ct_get_data();
1642
+
1643
+ if ($is_spam) {
1644
+ return $is_spam;
1645
+ }
1646
+
1647
+ if ($ct_options['contact_forms_test'] == 0) {
1648
+ return $is_spam;
1649
+ }
1650
+
1651
+ // Return unchanged result if the submission was already tested.
1652
+ if ($cleantalk_executed) {
1653
+ return $is_spam;
1654
+ }
1655
+
1656
+ $sender_info='';
1657
+
1658
+ $checkjs = js_test('ct_checkjs', $_COOKIE, true);
1659
+
1660
+ $post_info['comment_type'] = 'feedback';
1661
+ $post_info = json_encode($post_info);
1662
+ if ($post_info === false)
1663
+ $post_info = '';
1664
+
1665
+ $sender_email = null;
1666
+ $sender_nickname = null;
1667
+ $subject = '';
1668
+ $message = '';
1669
+ foreach ($_POST as $k => $v) {
1670
+ if(is_array($v)) {
1671
+ continue;
1672
+ }
1673
+ if ($sender_email === null && preg_match("/^\S+@\S+\.\S+$/", $v)) {
1674
+ $sender_email = $v;
1675
+ continue;
1676
+ }
1677
+ $message.= $v."\n";
1678
+ }
1679
+
1680
+ $ct_base_call_result = ct_base_call(array(
1681
+ 'message' => $message,
1682
+ 'example' => null,
1683
+ 'sender_email' => $sender_email,
1684
+ 'sender_nickname' => $sender_nickname,
1685
+ 'post_info' => $post_info,
1686
+ 'sender_info' => $sender_info,
1687
+ 'checkjs' => $checkjs
1688
+ ));
1689
+ $ct_result = $ct_base_call_result['ct_result'];
1690
+
1691
+ if ($ct_result->allow == 0) {
1692
+ $is_spam = true;
1693
+ }
1694
+
1695
+ return $is_spam;
1696
+ }
1697
+
1698
  /**
1699
  * Test S2member registration
1700
  * @return array with errors
1838
  isset($_POST['bbp_reply_content']) ||
1839
  isset($_COOKIE[LOGGED_IN_COOKIE]) ||
1840
  isset($_POST['fscf_submitted']) ||
1841
+ strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false ||
1842
+ isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit'])
1843
  ) {
1844
  return null;
1845
  }
1846
+
1847
  //@header("CtConditions: Passed");
1848
  cleantalk_debug("CtConditions", "Passed");
1849
 
1894
  $tmp=$_POST['TellAFriend_Link'];
1895
  unset($_POST['TellAFriend_Link']);
1896
  }
1897
+
1898
  //@header("CtBaseCallBefore: 1");
1899
  cleantalk_debug("CtBaseCallBefore", "1");
1900
 
1901
+
1902
  $ct_base_call_result = ct_base_call(array(
1903
  'message' => $subject . "\n\n" . $message,
1904
  'example' => null,
1908
  'sender_info' => get_sender_info(),
1909
  'checkjs' => $checkjs
1910
  ));
1911
+
1912
  //@header("CtBaseCall: Executed");
1913
  cleantalk_debug("CtBaseCall", "Executed");
1914
+
1915
  if(isset($_POST['TellAFriend_Link']))
1916
  {
1917
  $_POST['TellAFriend_Link']=$tmp;
2005
  isset($_POST['bbp_topic_content']) ||
2006
  isset($_POST['bbp_reply_content']) ||
2007
  isset($_POST['fscf_submitted']) ||
2008
+ isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit'])||
2009
  strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false
2010
  ) {
2011
  return null;
2147
  }
2148
  }
2149
 
2150
+ ?>
inc/cleantalk_nocache.js CHANGED
@@ -47,27 +47,16 @@ function ct_getCookie(name) {
47
 
48
  function ct_setCookie(name, value)
49
  {
50
- /*var domain=location.hostname;
51
- tmp=domain.split('.');
52
- if(tmp[0].toLowerCase()=='www')
53
- {
54
- tmp[0]='';
55
- }
56
- else
57
- {
58
- tmp[0]='.'+tmp[0];
59
- }
60
- domain=tmp.join('.');*/
61
-
62
- document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /";
63
- document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT";
64
- //document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /; domain = " + domain;
65
-
66
- var date = new Date;
67
- date.setDate(date.getDate() + 1);
68
- //setTimeout(function() { document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /; domain = " + domain}, 500)
69
- setTimeout(function() { document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /;"}, 500);
70
- //document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /;";
71
  }
72
 
73
  function ct_callback(req)
@@ -127,7 +116,6 @@ if(ct_nocache_executed==undefined)
127
  if(old_timestamp==undefined||new_timestamp-old_timestamp>86400||checkjs_cookie==undefined) //86400 is 24 hours
128
  {
129
  ct_setCookie('ct_timestamp', new_timestamp);
130
- //alert('set!');
131
  sendRequest(ct_ajaxurl+'?'+Math.random(),ct_callback,'action=ct_get_cookie');
132
  }
133
 
@@ -206,4 +194,4 @@ if(ct_nocache_executed==undefined)
206
 
207
  setTimeout(function() { document.cookie = "ct_user_info = "+escape(JSON.stringify(cleantalk_user_info))+"; path = /;"}, 500);
208
  }
209
- }
47
 
48
  function ct_setCookie(name, value)
49
  {
50
+ if (ct_set_cookies_flag) {
51
+ document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT; path = /";
52
+ document.cookie = name+" =; expires=Thu, 01 Jan 1970 00:00:01 GMT";
53
+
54
+ var date = new Date;
55
+ date.setDate(date.getDate() + 1);
56
+ setTimeout(function() { document.cookie = name+"=" + value + "; expires=" + date.toUTCString() + "; path = /;"}, 500);
57
+ }
58
+
59
+ return null;
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
 
62
  function ct_callback(req)
116
  if(old_timestamp==undefined||new_timestamp-old_timestamp>86400||checkjs_cookie==undefined) //86400 is 24 hours
117
  {
118
  ct_setCookie('ct_timestamp', new_timestamp);
 
119
  sendRequest(ct_ajaxurl+'?'+Math.random(),ct_callback,'action=ct_get_cookie');
120
  }
121
 
194
 
195
  setTimeout(function() { document.cookie = "ct_user_info = "+escape(JSON.stringify(cleantalk_user_info))+"; path = /;"}, 500);
196
  }
197
+ }
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Anti-Spam by CleanTalk - No Captcha, no comments & registrations spam ===
2
  Contributors: znaeff, shagimuratov, vlad-cleantalk
3
- Tags: anti-spam, antispam, bbpress, buddypress, captcha, cf7 spam, comments, contact form spam, signup, spam, spammers, spammy, woocommerce, wordpress spam, booking, order, subscription, gravity spam, jetpack, bots, contact form 7, contact form, registrations, ninja, Fast Secure Contact, Gravity forms, formidable, mailchimp, s2member, protection, protect, email, akismet, plugin, recaptcha, math, security, login, blacklist, prevent spam comments, wordpress, User Frontend, bulk delete, bulk remove, cloudflare, widget, review, auth forms, firewall, ddos, cleantalk, mailpoet, profile builder, comment spam, registration spam, spam comments, signup spam, filter, user registration spam,pingback,trackback,newsletter,puzzle,question
4
  Requires at least: 3.0
5
  Tested up to: 4.4.2
6
- Stable tag: 5.36.1
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -228,6 +228,9 @@ Plugin by default pass pingbacks without any checks. All trackbacks will be bloc
228
  = Can I use CleanTalk with Akismet? =
229
  Sure, you can use CleanTalk with Akismet. In this case probably you will have bigger false/positive rate (when legitimate comments/signups denies), but you will have stronger antispam protection at website.
230
 
 
 
 
231
  = Can I use CleanTalk to remove pending spam comments? =
232
  Yes, you can. The plugin has option to test all pending comments via database of <a href="https://cleantalk.org/blacklists">spam active IP/Email</a>, finded spam comments plugin moves to Trash folder.
233
 
@@ -336,7 +339,11 @@ If you think that message was blocked wrong, let us know about it.
336
  If you or someone from your visitors have error "Forbidden. Enable JavaScript." please check JavaScript support in your browser and do JavaScript test at this page <a href="https://cleantalk.org/checkout-javascript-support">Check out JavaScript support</a>.
337
 
338
  = Does the plugin work with Varnish? =
339
- CleanTalk works with Varnish, it protects WordPress against spam, but the plugin generates a few cookies that uses to protect against spam bots it disables Varnish cache on pages with cookies by CleanTalk. We are going to release a new version with option that turns cookies off. In that way plugin will protect WordPress comments, registrations and most of popular contact forms, but will not protect some of rarely used contact forms.
 
 
 
 
340
 
341
  == Other notes ==
342
 
@@ -350,11 +357,12 @@ Technical Support 24/7 to help you get accustomed to the work of the anti-spam s
350
  If you have specific needs, you can contact our Cleantalk customer support team at any time, day or night.
351
  We strive to answer all emails within 1-2 hours, and most are answered in substantially less time.
352
 
353
- When you contact CleanTalk Technical Support, we recommend to give us following:
 
354
  1. Site URL.
355
- 2. CMS name and version.
356
- 3. URL of page with the comments / registration / feedback form.
357
- This will help us give you a faster response. Please write us: welcome [at] cleantalk dot com
358
 
359
  If you're having trouble getting things to work after installing the plugin, here are a few things to check:
360
 
@@ -427,6 +435,15 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
427
  1. CleanTalk works faster than most of other anti-spam plugins.
428
 
429
  == Changelog ==
 
 
 
 
 
 
 
 
 
430
  = 5.36.1 2016-02-05 =
431
  * Fixed bug, when users receive error after logging in
432
 
@@ -662,6 +679,9 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
662
  * Added current options to array sended to CleanTalk servers.
663
 
664
  == Upgrade Notice ==
 
 
 
665
  = 5.36.1 2016-02-05 =
666
  * Fixed bug, when users receive error after logging in
667
 
1
  === Anti-Spam by CleanTalk - No Captcha, no comments & registrations spam ===
2
  Contributors: znaeff, shagimuratov, vlad-cleantalk
3
+ Tags: anti-spam, antispam, bbpress, buddypress, captcha, cf7 spam, comments, contact form spam, signup, spam, spammers, spammy, woocommerce, wordpress spam, booking, order, subscription, gravity spam, jetpack, bots, contact form 7, contact form, registrations, ninja, Fast Secure Contact, Gravity forms, formidable, mailchimp, s2member, protection, protect, email, akismet, plugin, recaptcha, math, security, login, blacklist, prevent spam comments, wordpress, User Frontend, bulk delete, bulk remove, cloudflare, widget, review, auth forms, firewall, ddos, cleantalk, mailpoet, profile builder, comment spam, registration spam, spam comments, signup spam, filter, user registration spam,pingback,trackback,newsletter,puzzle,question,varnish
4
  Requires at least: 3.0
5
  Tested up to: 4.4.2
6
+ Stable tag: 5.37.3
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
228
  = Can I use CleanTalk with Akismet? =
229
  Sure, you can use CleanTalk with Akismet. In this case probably you will have bigger false/positive rate (when legitimate comments/signups denies), but you will have stronger antispam protection at website.
230
 
231
+ = Is CleanTalk better than Akismet? =
232
+ Please look features comparison here https://cleantalk.org/cleantalk-vs-akismet
233
+
234
  = Can I use CleanTalk to remove pending spam comments? =
235
  Yes, you can. The plugin has option to test all pending comments via database of <a href="https://cleantalk.org/blacklists">spam active IP/Email</a>, finded spam comments plugin moves to Trash folder.
236
 
339
  If you or someone from your visitors have error "Forbidden. Enable JavaScript." please check JavaScript support in your browser and do JavaScript test at this page <a href="https://cleantalk.org/checkout-javascript-support">Check out JavaScript support</a>.
340
 
341
  = Does the plugin work with Varnish? =
342
+ CleanTalk works with Varnish, it protects WordPress against spam, but by default the plugin generates a few cookies that uses to protect against spam bots it disables Varnish cache on pages with CleanTalk's cookies. To resolve issue with cache turn off option 'Set cookies' in plugin settings.
343
+
344
+ WordPress console -> Settings -> CleanTalk -> Advanced settings
345
+
346
+ In that way plugin will protect WordPress comments, registrations and most of popular contact forms, but will not protect some of rarely used contact forms.
347
 
348
  == Other notes ==
349
 
357
  If you have specific needs, you can contact our Cleantalk customer support team at any time, day or night.
358
  We strive to answer all emails within 1-2 hours, and most are answered in substantially less time.
359
 
360
+ When you contact CleanTalk technical support, we recommend to give us following:
361
+
362
  1. Site URL.
363
+ 1. CMS name and version.
364
+ 1. URL of page with the comments / registration / feedback form.
365
+ This will help us give you a faster response. Please write us here https://cleantalk.org/my/support.
366
 
367
  If you're having trouble getting things to work after installing the plugin, here are a few things to check:
368
 
435
  1. CleanTalk works faster than most of other anti-spam plugins.
436
 
437
  == Changelog ==
438
+ = 5.37.3 2016-03-10 =
439
+ * Fixed bug with broken MailPoet previews.
440
+ * Fixed bug with broken Geo My WP pop-up windows.
441
+ * Fixed issue with mb_convert_encoding() function.
442
+ * Removed double JavaScript code in front-end.
443
+ * Removed unused variables in anti spam logic.
444
+ * Added option 'Set cookies' (turned on by default). If the option turned off, the plugin will not generate cookies, but in this case plugin will not protect some rarely used contact forms. Any way, turn this option off be compatible with Varnish in spam protection for WordPress core comments, registrations and most popular contact forms.
445
+ * Added spam protection for Gravity forms via option 'Contact forms' with hook gform_entry_is_spam().
446
+
447
  = 5.36.1 2016-02-05 =
448
  * Fixed bug, when users receive error after logging in
449
 
679
  * Added current options to array sended to CleanTalk servers.
680
 
681
  == Upgrade Notice ==
682
+ = 5.37.3 2016-03-10 =
683
+ * Minor bug fixes. Added an option to support Varnish cache.
684
+
685
  = 5.36.1 2016-02-05 =
686
  * Fixed bug, when users receive error after logging in
687