Spam protection, AntiSpam, FireWall by CleanTalk - Version 5.34

Version Description

2015-12-10 = * Improved spam checking mechanism * Added "Collect browser details" option for better antispam protection * Fixed custom contact forms checking for AJAX requests * Minor translations fixes

Download this release

Release Info

Developer Vlad Cleantalk
Plugin Icon 128x128 Spam protection, AntiSpam, FireWall by CleanTalk
Version 5.34
Comparing to
See all releases

Code changes from version 5.33.1 to 5.34

cleantalk.php CHANGED
@@ -3,11 +3,11 @@
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.33.1
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
- $cleantalk_plugin_version='5.33.1';
11
  $cleantalk_executed=false;
12
 
13
  if(defined('CLEANTALK_AJAX_USE_BUFFER'))
@@ -48,10 +48,12 @@ if(!defined('CLEANTALK_PLUGIN_DIR')){
48
  {
49
  $value=0;
50
  }
51
- if($value==1 && !is_admin() && stripos($_SERVER['REQUEST_URI'],'/wp-admin/')===false || stripos($_SERVER['REQUEST_URI'],basename(admin_url('admin-ajax.php')))!=false) //&& (!isset($_POST) || isset($_POST) && sizeof($_POST)==0)
 
52
  {
53
  $is_sfw_check=true;
54
  $ip=cleantalk_get_ip();
 
55
  for($i=0;$i<sizeof($ip);$i++)
56
  {
57
  if(isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key']==md5($ip[$i].$ct_options['apikey']))
@@ -130,7 +132,8 @@ if(!defined('CLEANTALK_PLUGIN_DIR')){
130
  register_deactivation_hook( __FILE__, 'ct_deactivation' );
131
 
132
  // After plugin loaded - to load locale as described in manual
133
- add_action( 'admin_init', 'ct_plugin_loaded' );
 
134
 
135
  if(isset($ct_options['use_ajax']))
136
  {
@@ -188,8 +191,13 @@ if(!defined('CLEANTALK_PLUGIN_DIR')){
188
  }
189
  if (defined( 'DOING_AJAX' ) && DOING_AJAX||isset($_POST['cma-action']))
190
  {
 
191
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
192
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-ajax.php');
 
 
 
 
193
  }
194
 
195
  add_action('admin_enqueue_scripts', 'ct_enqueue_scripts');
@@ -334,7 +342,7 @@ function ct_add_nocache_script_header()
334
  {
335
  global $ct_options;
336
  $ct_options=ct_get_options();
337
- if(substr($ct_options['apikey'],0,1)=='y')
338
  {
339
  $ct_info_flag="var ct_info_flag=true;\n";
340
  }
@@ -350,7 +358,7 @@ function ct_inject_nocache_script($html)
350
  {
351
  global $test_external_forms, $cleantalk_plugin_version, $ct_options;
352
  $ct_options=ct_get_options();
353
- if(substr($ct_options['apikey'],0,1)=='y')
354
  {
355
  $ct_info_flag="var ct_info_flag=true;\n";
356
  }
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.34
7
  Author: СleanTalk <welcome@cleantalk.org>
8
  Author URI: http://cleantalk.org
9
  */
10
+ $cleantalk_plugin_version='5.34';
11
  $cleantalk_executed=false;
12
 
13
  if(defined('CLEANTALK_AJAX_USE_BUFFER'))
48
  {
49
  $value=0;
50
  }
51
+
52
+ if($value==1 && !is_admin() && stripos($_SERVER['REQUEST_URI'],'/wp-admin/')===false || $value==1 && defined( 'DOING_AJAX' ) && DOING_AJAX)
53
  {
54
  $is_sfw_check=true;
55
  $ip=cleantalk_get_ip();
56
+
57
  for($i=0;$i<sizeof($ip);$i++)
58
  {
59
  if(isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key']==md5($ip[$i].$ct_options['apikey']))
132
  register_deactivation_hook( __FILE__, 'ct_deactivation' );
133
 
134
  // After plugin loaded - to load locale as described in manual
135
+ add_action( 'ct_init', 'ct_plugin_loaded' );
136
+ ct_plugin_loaded();
137
 
138
  if(isset($ct_options['use_ajax']))
139
  {
191
  }
192
  if (defined( 'DOING_AJAX' ) && DOING_AJAX||isset($_POST['cma-action']))
193
  {
194
+ $cleantalk_hooked_actions=Array();
195
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-public.php');
196
  require_once(CLEANTALK_PLUGIN_DIR . 'inc/cleantalk-ajax.php');
197
+ if(isset($_POST['action'])&&!in_array($_POST['action'],$cleantalk_hooked_actions))
198
+ {
199
+ ct_ajax_hook();
200
+ }
201
  }
202
 
203
  add_action('admin_enqueue_scripts', 'ct_enqueue_scripts');
342
  {
343
  global $ct_options;
344
  $ct_options=ct_get_options();
345
+ if(@intval($ct_options['collect_details'])==1)
346
  {
347
  $ct_info_flag="var ct_info_flag=true;\n";
348
  }
358
  {
359
  global $test_external_forms, $cleantalk_plugin_version, $ct_options;
360
  $ct_options=ct_get_options();
361
+ if(@intval($ct_options['collect_details'])==1)
362
  {
363
  $ct_info_flag="var ct_info_flag=true;\n";
364
  }
i18n/cleantalk-da_DK.mo CHANGED
Binary file
i18n/cleantalk-de_DE.mo CHANGED
Binary file
i18n/cleantalk-es_ES.mo CHANGED
Binary file
i18n/cleantalk-fr_FR.mo CHANGED
Binary file
i18n/cleantalk-pl_PL.mo CHANGED
Binary file
i18n/cleantalk-pt_PT.mo CHANGED
Binary file
i18n/cleantalk-ru_RU.mo CHANGED
Binary file
inc/cleantalk-admin.php CHANGED
@@ -143,7 +143,7 @@ function ct_admin_init()
143
  cleantalk_update_sfw();
144
  }
145
 
146
- $show_ct_notice_trial = false;
147
  if (isset($_COOKIE[$ct_notice_trial_label]))
148
  {
149
  if ($_COOKIE[$ct_notice_trial_label] == 1)
@@ -158,7 +158,7 @@ function ct_admin_init()
158
  {
159
  $show_ct_notice_renew = true;
160
  }
161
- }
162
  $show_ct_notice_autokey = false;
163
  if (isset($_COOKIE[$ct_notice_autokey_label]) && !empty($_COOKIE[$ct_notice_autokey_label]))
164
  {
@@ -221,13 +221,14 @@ function ct_admin_init()
221
  setcookie($ct_notice_autokey_label, (string) base64_encode(sprintf(__('Unable to connect to %s.', 'cleantalk'), 'api.cleantalk.org')), 0, '/');
222
  }
223
  }
224
-
225
  if (time() > $ct_data['next_account_status_check']||
226
- isset($_POST['option_page'])&&$_POST['option_page']=='cleantalk_settings'&&$ct_options['apikey']!=$_POST['cleantalk_settings']['apikey'])
227
  {
228
  $result = false;
229
- if (function_exists('curl_init') && function_exists('json_decode') && ct_valid_key($ct_options['apikey']))
230
- {
 
231
  if(!function_exists('noticePaidTill'))
232
  {
233
  require_once('cleantalk.class.php');
@@ -259,16 +260,20 @@ function ct_admin_init()
259
  {
260
  $notice_check_timeout = $trial_notice_check_timeout;
261
  $show_ct_notice_trial = true;
 
262
  }
263
  if ($result['show_notice'] == 1 && isset($result['renew']) && $result['renew'] == 1)
264
  {
265
  $notice_check_timeout = $account_notice_check_timeout;
266
  $show_ct_notice_renew = true;
 
267
  }
268
 
269
  if ($result['show_notice'] == 0)
270
  {
271
- $notice_check_timeout = $account_notice_check_timeout;
 
 
272
  }
273
  }
274
 
@@ -281,9 +286,9 @@ function ct_admin_init()
281
  // Save next status request time
282
  $ct_data['next_account_status_check'] = time()+86400;
283
  update_option('cleantalk_data', $ct_data);
284
- }
285
 
286
- if ($result)
287
  {
288
  if($show_ct_notice_trial == true)
289
  {
@@ -293,7 +298,7 @@ function ct_admin_init()
293
  {
294
  setcookie($ct_notice_renew_label, (string) $show_ct_notice_renew, strtotime("+$renew_notice_showtime minutes"), '/');
295
  }
296
- }
297
  }
298
 
299
  $show_ct_notice_online = '';
@@ -390,8 +395,9 @@ function ct_admin_init()
390
  add_settings_field('cleantalk_check_external', __('Protect external forms', 'cleantalk'), 'ct_input_check_external', 'cleantalk', 'cleantalk_settings_anti_spam');
391
  add_settings_field('cleantalk_check_comments_number', __("Don't check comments", 'cleantalk'), 'ct_input_check_comments_number', 'cleantalk', 'cleantalk_settings_anti_spam');
392
  //add_settings_field('cleantalk_check_messages_number', __("Don't check messages", 'cleantalk'), 'ct_input_check_messages_number', 'cleantalk', 'cleantalk_settings_anti_spam');
 
 
393
  add_settings_field('cleantalk_show_link', __('', 'cleantalk'), 'ct_input_show_link', 'cleantalk', 'cleantalk_settings_banner');
394
- add_settings_field('cleantalk_spam_firewall', __('', 'cleantalk'), 'ct_input_spam_firewall', 'cleantalk', 'cleantalk_settings_anti_spam');
395
  }
396
  }
397
 
@@ -785,6 +791,33 @@ function ct_input_check_comments_number() {
785
  @admin_addDescriptionsFields(sprintf(__("Dont't check comments for users with above $comments_check_number comments", 'cleantalk'), $ct_options['check_comments_number']));
786
  }
787
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
788
  function ct_input_check_messages_number() {
789
  global $ct_options, $ct_data;
790
 
@@ -882,7 +915,7 @@ function ct_input_spam_firewall() {
882
 
883
  echo "<div id='cleantalk_anchor1' style='display:none'></div><input type=hidden name='cleantalk_settings[spam_firewall]' value='0' />";
884
  echo "<input type='checkbox' id='cleantalk_spam_firewall1' name='cleantalk_settings[spam_firewall]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='cleantalk_spam_firewall1'> " . __('SpamFireWall') . "</label>";
885
- @admin_addDescriptionsFields(sprintf(__("EXPEREMENTAL! Use on your own risk.<br />This option allows to filter spam bots before they access website. Also reduces CPU usage on hosting server and accelerates pages load time.", 'cleantalk'), $ct_options['spam_firewall']));
886
  echo "<script>
887
  jQuery(document).ready(function(){
888
  jQuery('#cleantalk_anchor1').parent().parent().children().first().hide();
@@ -1026,8 +1059,17 @@ function cleantalk_admin_notice_message(){
1026
  echo '<div class="error"><h3>' . sprintf(__("Please enter Access Key in %s settings to enable anti spam protection!", 'cleantalk'), "<a href=\"options-general.php?page=cleantalk\">CleanTalk plugin</a>") . '</h3></div>';
1027
  $show_notice = false;
1028
  }
 
 
 
 
 
 
 
 
 
1029
 
1030
- if ($show_notice && $show_ct_notice_trial && $value==1 && (is_network_admin() || is_admin())) {
1031
  echo '<div class="error"><h3>' . sprintf(__("%s trial period ends, please upgrade to %s!", 'cleantalk'), "<a href=\"options-general.php?page=cleantalk\">$ct_plugin_name</a>", "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20trial$user_token\" target=\"_blank\"><b>premium version</b></a>") . '</h3></div>';
1032
  $show_notice = false;
1033
  }
@@ -1050,8 +1092,17 @@ function cleantalk_admin_notice_message(){
1050
  {
1051
  $link="?close_notice=1";
1052
  }
 
 
 
 
 
 
 
 
 
1053
 
1054
- if ($show_notice && $show_ct_notice_renew && $value==1 && time()>$next_notice_show && (is_network_admin() || is_admin())) {
1055
  $button_html = "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20renew$user_token\" target=\"_blank\">" . '<input type="button" class="button button-primary" value="' . __('RENEW ANTI-SPAM', 'cleantalk') . '" />' . "</a>";
1056
  echo '<div class="updated"><a href="'.$link.'" style="text-decoration:none;float:right;font-size:16px;margin-top:5px;"><b>X</b></a><h3>' . sprintf(__("Please renew your anti-spam license for %s.", 'cleantalk'), "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20renew$user_token\" target=\"_blank\"><b>" . __('next year', 'cleantalk') ."</b></a>") . '<br /><br />' . $button_html . '</h3></div>';
1057
  $show_notice = false;
143
  cleantalk_update_sfw();
144
  }
145
 
146
+ /*$show_ct_notice_trial = false;
147
  if (isset($_COOKIE[$ct_notice_trial_label]))
148
  {
149
  if ($_COOKIE[$ct_notice_trial_label] == 1)
158
  {
159
  $show_ct_notice_renew = true;
160
  }
161
+ }*/
162
  $show_ct_notice_autokey = false;
163
  if (isset($_COOKIE[$ct_notice_autokey_label]) && !empty($_COOKIE[$ct_notice_autokey_label]))
164
  {
221
  setcookie($ct_notice_autokey_label, (string) base64_encode(sprintf(__('Unable to connect to %s.', 'cleantalk'), 'api.cleantalk.org')), 0, '/');
222
  }
223
  }
224
+
225
  if (time() > $ct_data['next_account_status_check']||
226
+ isset($_POST['cleantalk_settings']['apikey']))
227
  {
228
  $result = false;
229
+
230
+ //if (true)
231
+ //{
232
  if(!function_exists('noticePaidTill'))
233
  {
234
  require_once('cleantalk.class.php');
260
  {
261
  $notice_check_timeout = $trial_notice_check_timeout;
262
  $show_ct_notice_trial = true;
263
+ $ct_data['show_ct_notice_trial']=1;
264
  }
265
  if ($result['show_notice'] == 1 && isset($result['renew']) && $result['renew'] == 1)
266
  {
267
  $notice_check_timeout = $account_notice_check_timeout;
268
  $show_ct_notice_renew = true;
269
+ $ct_data['show_ct_notice_renew']=1;
270
  }
271
 
272
  if ($result['show_notice'] == 0)
273
  {
274
+ $notice_check_timeout = $account_notice_check_timeout;
275
+ $ct_data['show_ct_notice_trial']=0;
276
+ $ct_data['show_ct_notice_renew']=0;
277
  }
278
  }
279
 
286
  // Save next status request time
287
  $ct_data['next_account_status_check'] = time()+86400;
288
  update_option('cleantalk_data', $ct_data);
289
+ //}
290
 
291
+ /*if ($result)
292
  {
293
  if($show_ct_notice_trial == true)
294
  {
298
  {
299
  setcookie($ct_notice_renew_label, (string) $show_ct_notice_renew, strtotime("+$renew_notice_showtime minutes"), '/');
300
  }
301
+ }*/
302
  }
303
 
304
  $show_ct_notice_online = '';
395
  add_settings_field('cleantalk_check_external', __('Protect external forms', 'cleantalk'), 'ct_input_check_external', 'cleantalk', 'cleantalk_settings_anti_spam');
396
  add_settings_field('cleantalk_check_comments_number', __("Don't check comments", 'cleantalk'), 'ct_input_check_comments_number', 'cleantalk', 'cleantalk_settings_anti_spam');
397
  //add_settings_field('cleantalk_check_messages_number', __("Don't check messages", 'cleantalk'), 'ct_input_check_messages_number', 'cleantalk', 'cleantalk_settings_anti_spam');
398
+ add_settings_field('cleantalk_spam_firewall', __('', 'cleantalk'), 'ct_input_spam_firewall', 'cleantalk', 'cleantalk_settings_banner');
399
+ add_settings_field('cleantalk_collect_details', __('Collect details about browsers', 'cleantalk'), 'ct_input_collect_details', 'cleantalk', 'cleantalk_settings_banner');
400
  add_settings_field('cleantalk_show_link', __('', 'cleantalk'), 'ct_input_show_link', 'cleantalk', 'cleantalk_settings_banner');
 
401
  }
402
  }
403
 
791
  @admin_addDescriptionsFields(sprintf(__("Dont't check comments for users with above $comments_check_number comments", 'cleantalk'), $ct_options['check_comments_number']));
792
  }
793
 
794
+ function ct_input_collect_details() {
795
+ global $ct_options, $ct_data;
796
+
797
+ $ct_options = ct_get_options();
798
+ $ct_data = ct_get_data();
799
+
800
+ if(isset($ct_options['collect_details']))
801
+ {
802
+ $value = @intval($ct_options['collect_details']);
803
+ }
804
+ else
805
+ {
806
+ $value=0;
807
+ }
808
+
809
+ echo "<div id='cleantalk_anchor2' style='display:none'></div><input type=hidden name='cleantalk_settings[collect_details]' value='0' />";
810
+ echo "<input type='checkbox' id='collect_details1' name='cleantalk_settings[collect_details]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='collect_details1'> " . __('Collect details about browsers') . "</label>";
811
+ @admin_addDescriptionsFields(sprintf(__("Checking this box you allow plugin store information about screen size and browser plugins of website visitors. The option in a beta state.", 'cleantalk'), $ct_options['spam_firewall']));
812
+ echo "<script>
813
+ jQuery(document).ready(function(){
814
+ jQuery('#cleantalk_anchor2').parent().parent().children().first().hide();
815
+ jQuery('#cleantalk_anchor2').parent().css('padding-left','0px');
816
+ jQuery('#cleantalk_anchor2').parent().attr('colspan', '2');
817
+ });
818
+ </script>";
819
+ }
820
+
821
  function ct_input_check_messages_number() {
822
  global $ct_options, $ct_data;
823
 
915
 
916
  echo "<div id='cleantalk_anchor1' style='display:none'></div><input type=hidden name='cleantalk_settings[spam_firewall]' value='0' />";
917
  echo "<input type='checkbox' id='cleantalk_spam_firewall1' name='cleantalk_settings[spam_firewall]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='cleantalk_spam_firewall1'> " . __('SpamFireWall') . "</label>";
918
+ @admin_addDescriptionsFields(sprintf(__("This option allows to filter spam bots before they access website. Also reduces CPU usage on hosting server and accelerates pages load time.", 'cleantalk'), $ct_options['spam_firewall']));
919
  echo "<script>
920
  jQuery(document).ready(function(){
921
  jQuery('#cleantalk_anchor1').parent().parent().children().first().hide();
1059
  echo '<div class="error"><h3>' . sprintf(__("Please enter Access Key in %s settings to enable anti spam protection!", 'cleantalk'), "<a href=\"options-general.php?page=cleantalk\">CleanTalk plugin</a>") . '</h3></div>';
1060
  $show_notice = false;
1061
  }
1062
+
1063
+ if(isset($ct_data['show_ct_notice_trial']))
1064
+ {
1065
+ $show_ct_notice_trial = intval($ct_data['show_ct_notice_trial']);
1066
+ }
1067
+ else
1068
+ {
1069
+ $show_ct_notice_trial = 0;
1070
+ }
1071
 
1072
+ if ($show_notice && $show_ct_notice_trial ==1 && $value==1 && (is_network_admin() || is_admin())) {
1073
  echo '<div class="error"><h3>' . sprintf(__("%s trial period ends, please upgrade to %s!", 'cleantalk'), "<a href=\"options-general.php?page=cleantalk\">$ct_plugin_name</a>", "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20trial$user_token\" target=\"_blank\"><b>premium version</b></a>") . '</h3></div>';
1074
  $show_notice = false;
1075
  }
1092
  {
1093
  $link="?close_notice=1";
1094
  }
1095
+
1096
+ if(isset($ct_data['show_ct_notice_renew']))
1097
+ {
1098
+ $show_ct_notice_renew = intval($ct_data['show_ct_notice_renew']);
1099
+ }
1100
+ else
1101
+ {
1102
+ $show_ct_notice_renew = 0;
1103
+ }
1104
 
1105
+ if ($show_notice && $show_ct_notice_renew == 1 && $value==1 && (is_network_admin() || is_admin())) {
1106
  $button_html = "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20renew$user_token\" target=\"_blank\">" . '<input type="button" class="button button-primary" value="' . __('RENEW ANTI-SPAM', 'cleantalk') . '" />' . "</a>";
1107
  echo '<div class="updated"><a href="'.$link.'" style="text-decoration:none;float:right;font-size:16px;margin-top:5px;"><b>X</b></a><h3>' . sprintf(__("Please renew your anti-spam license for %s.", 'cleantalk'), "<a href=\"http://cleantalk.org/my/bill/recharge?utm_source=wp-backend&utm_medium=cpc&utm_campaign=WP%20backend%20renew$user_token\" target=\"_blank\"><b>" . __('next year', 'cleantalk') ."</b></a>") . '<br /><br />' . $button_html . '</h3></div>';
1108
  $show_notice = false;
inc/cleantalk-ajax.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
-
3
  /*
4
  AJAX functions
5
  */
@@ -7,6 +7,7 @@ AJAX functions
7
  /*hooks for AJAX Login & Register email validation*/
8
  add_action( 'wp_ajax_nopriv_validate_email', 'ct_validate_email_ajaxlogin',1 );
9
  add_action( 'wp_ajax_validate_email', 'ct_validate_email_ajaxlogin',1 );
 
10
 
11
  /*hooks for user registration*/
12
  add_action( 'user_register', 'ct_user_register_ajaxlogin',1 );
@@ -16,24 +17,28 @@ add_action( 'user_register', 'ct_user_register_ajaxlogin',1 );
16
  //add_action( 'wp_ajax_wpuf_submit_register', 'ct_wpuf_submit_register',1 );
17
  add_action( 'wp_ajax_nopriv_wpuf_submit_register', 'ct_ajax_hook',1 );
18
  add_action( 'wp_ajax_wpuf_submit_register', 'ct_ajax_hook',1 );
 
19
 
20
  /*hooks for MyMail */
21
  //add_action( 'wp_ajax_nopriv_mymail_form_submit', 'ct_mymail_form_submit',1 );
22
  //add_action( 'wp_ajax_mymail_form_submit', 'ct_mymail_form_submit',1 );
23
  add_action( 'wp_ajax_nopriv_mymail_form_submit', 'ct_ajax_hook',1 );
24
  add_action( 'wp_ajax_mymail_form_submit', 'ct_ajax_hook',1 );
 
25
 
26
  /*hooks for MailPoet */
27
  //add_action( 'wp_ajax_nopriv_wysija_ajax', 'ct_wysija_ajax',1 );
28
  //add_action( 'wp_ajax_wysija_ajax', 'ct_wysija_ajax',1 );
29
  add_action( 'wp_ajax_nopriv_wysija_ajax', 'ct_ajax_hook',1 );
30
  add_action( 'wp_ajax_wysija_ajax', 'ct_ajax_hook',1 );
 
31
 
32
  /*hooks for cs_registration_validation */
33
  //add_action( 'wp_ajax_nopriv_cs_registration_validation', 'ct_cs_registration_validation',1 );
34
  //add_action( 'wp_ajax_cs_registration_validation', 'ct_cs_registration_validation',1 );
35
  add_action( 'wp_ajax_nopriv_cs_registration_validation', 'ct_ajax_hook',1 );
36
  add_action( 'wp_ajax_cs_registration_validation', 'ct_ajax_hook',1 );
 
37
 
38
  /*hooks for send_message and request_appointment */
39
  //add_action( 'wp_ajax_nopriv_send_message', 'ct_sm_ra',1 );
@@ -44,39 +49,48 @@ add_action( 'wp_ajax_nopriv_send_message', 'ct_ajax_hook',1 );
44
  add_action( 'wp_ajax_send_message', 'ct_ajax_hook',1 );
45
  add_action( 'wp_ajax_nopriv_request_appointment', 'ct_ajax_hook',1 );
46
  add_action( 'wp_ajax_request_appointment', 'ct_ajax_hook',1 );
 
 
47
 
48
  /*hooks for zn_do_login */
49
  //add_action( 'wp_ajax_nopriv_zn_do_login', 'ct_zn_do_login',1 );
50
  //add_action( 'wp_ajax_zn_do_login', 'ct_zn_do_login',1 );
51
  add_action( 'wp_ajax_nopriv_zn_do_login', 'ct_ajax_hook',1 );
52
  add_action( 'wp_ajax_zn_do_login', 'ct_ajax_hook',1 );
 
53
 
54
  /*hooks for zn_do_login */
55
  //add_action( 'wp_ajax_nopriv_cscf-submitform', 'ct_cscf_submitform',1 );
56
  //add_action( 'wp_ajax_cscf-submitform', 'ct_cscf_submitform',1 );
57
  add_action( 'wp_ajax_nopriv_cscf-submitform', 'ct_ajax_hook',1 );
58
  add_action( 'wp_ajax_cscf-submitform', 'ct_ajax_hook',1 );
 
59
 
60
  /*hooks for stats */
61
  add_action( 'wp_ajax_nopriv_ajax_get_stats', 'ct_get_stats',1 );
62
  add_action( 'wp_ajax_ajax_get_stats', 'ct_get_stats',1 );
 
63
 
64
  /*hooks for visual form builder */
65
  //add_action( 'wp_ajax_nopriv_vfb_submit', 'ct_vfb_submit',1 );
66
  //add_action( 'wp_ajax_vfb_submit', 'ct_vfb_submit',1 );
67
  add_action( 'wp_ajax_nopriv_vfb_submit', 'ct_ajax_hook',1 );
68
  add_action( 'wp_ajax_vfb_submit', 'ct_ajax_hook',1 );
 
69
 
70
  /*hooks for woocommerce_checkout*/
71
  add_action( 'wp_ajax_nopriv_woocommerce_checkout', 'ct_ajax_hook',1 );
72
  add_action( 'wp_ajax_woocommerce_checkout', 'ct_ajax_hook',1 );
 
73
 
74
  /*hooks for frm_action*/
75
  add_action( 'wp_ajax_nopriv_frm_entries_create', 'ct_ajax_hook',1 );
76
  add_action( 'wp_ajax_frm_entries_create', 'ct_ajax_hook',1 );
 
77
 
78
  add_action( 'wp_ajax_nopriv_td_mod_register', 'ct_ajax_hook',1 );
79
  add_action( 'wp_ajax_td_mod_register', 'ct_ajax_hook',1 );
 
80
 
81
  /*hooks for tevolution theme*/
82
  add_action( 'wp_ajax_nopriv_tmpl_ajax_check_user_email', 'ct_ajax_hook',1 );
@@ -85,6 +99,9 @@ add_action( 'wp_ajax_nopriv_tevolution_submit_from_preview', 'ct_ajax_hook',1 )
85
  add_action( 'wp_ajax_tevolution_submit_from_preview', 'ct_ajax_hook',1 );
86
  add_action( 'wp_ajax_nopriv_submit_form_recaptcha_validation', 'ct_ajax_hook',1 );
87
  add_action( 'wp_ajax_tmpl_submit_form_recaptcha_validation', 'ct_ajax_hook',1 );
 
 
 
88
 
89
  /**hooks for cm answers pro */
90
  add_action( 'template_redirect', 'ct_ajax_hook',1 );
@@ -92,6 +109,7 @@ add_action( 'template_redirect', 'ct_ajax_hook',1 );
92
  /* hooks for ninja forms ajax*/
93
  add_action( 'wp_ajax_nopriv_ninja_forms_ajax_submit', 'ct_ajax_hook',1 );
94
  add_action( 'wp_ajax_ninja_forms_ajax_submit', 'ct_ajax_hook',1 );
 
95
 
96
  function ct_get_stats()
97
  {
@@ -455,6 +473,11 @@ function ct_ajax_hook()
455
  print '{"form_id":'.$_POST['_form_id'].',"errors":false,"success":{"success_msg-Success":"'.$ct_result->comment.'"}}';
456
  die();
457
  }
 
 
 
 
 
458
  }
459
  }
460
  }
1
  <?php
2
+ global $cleantalk_hooked_actions;
3
  /*
4
  AJAX functions
5
  */
7
  /*hooks for AJAX Login & Register email validation*/
8
  add_action( 'wp_ajax_nopriv_validate_email', 'ct_validate_email_ajaxlogin',1 );
9
  add_action( 'wp_ajax_validate_email', 'ct_validate_email_ajaxlogin',1 );
10
+ $cleantalk_hooked_actions[]='validate_email';
11
 
12
  /*hooks for user registration*/
13
  add_action( 'user_register', 'ct_user_register_ajaxlogin',1 );
17
  //add_action( 'wp_ajax_wpuf_submit_register', 'ct_wpuf_submit_register',1 );
18
  add_action( 'wp_ajax_nopriv_wpuf_submit_register', 'ct_ajax_hook',1 );
19
  add_action( 'wp_ajax_wpuf_submit_register', 'ct_ajax_hook',1 );
20
+ $cleantalk_hooked_actions[]='submit_register';
21
 
22
  /*hooks for MyMail */
23
  //add_action( 'wp_ajax_nopriv_mymail_form_submit', 'ct_mymail_form_submit',1 );
24
  //add_action( 'wp_ajax_mymail_form_submit', 'ct_mymail_form_submit',1 );
25
  add_action( 'wp_ajax_nopriv_mymail_form_submit', 'ct_ajax_hook',1 );
26
  add_action( 'wp_ajax_mymail_form_submit', 'ct_ajax_hook',1 );
27
+ $cleantalk_hooked_actions[]='form_submit';
28
 
29
  /*hooks for MailPoet */
30
  //add_action( 'wp_ajax_nopriv_wysija_ajax', 'ct_wysija_ajax',1 );
31
  //add_action( 'wp_ajax_wysija_ajax', 'ct_wysija_ajax',1 );
32
  add_action( 'wp_ajax_nopriv_wysija_ajax', 'ct_ajax_hook',1 );
33
  add_action( 'wp_ajax_wysija_ajax', 'ct_ajax_hook',1 );
34
+ $cleantalk_hooked_actions[]='wysija_ajax';
35
 
36
  /*hooks for cs_registration_validation */
37
  //add_action( 'wp_ajax_nopriv_cs_registration_validation', 'ct_cs_registration_validation',1 );
38
  //add_action( 'wp_ajax_cs_registration_validation', 'ct_cs_registration_validation',1 );
39
  add_action( 'wp_ajax_nopriv_cs_registration_validation', 'ct_ajax_hook',1 );
40
  add_action( 'wp_ajax_cs_registration_validation', 'ct_ajax_hook',1 );
41
+ $cleantalk_hooked_actions[]='cs_registration_validation';
42
 
43
  /*hooks for send_message and request_appointment */
44
  //add_action( 'wp_ajax_nopriv_send_message', 'ct_sm_ra',1 );
49
  add_action( 'wp_ajax_send_message', 'ct_ajax_hook',1 );
50
  add_action( 'wp_ajax_nopriv_request_appointment', 'ct_ajax_hook',1 );
51
  add_action( 'wp_ajax_request_appointment', 'ct_ajax_hook',1 );
52
+ $cleantalk_hooked_actions[]='send_message';
53
+ $cleantalk_hooked_actions[]='request_appointment';
54
 
55
  /*hooks for zn_do_login */
56
  //add_action( 'wp_ajax_nopriv_zn_do_login', 'ct_zn_do_login',1 );
57
  //add_action( 'wp_ajax_zn_do_login', 'ct_zn_do_login',1 );
58
  add_action( 'wp_ajax_nopriv_zn_do_login', 'ct_ajax_hook',1 );
59
  add_action( 'wp_ajax_zn_do_login', 'ct_ajax_hook',1 );
60
+ $cleantalk_hooked_actions[]='zn_do_login';
61
 
62
  /*hooks for zn_do_login */
63
  //add_action( 'wp_ajax_nopriv_cscf-submitform', 'ct_cscf_submitform',1 );
64
  //add_action( 'wp_ajax_cscf-submitform', 'ct_cscf_submitform',1 );
65
  add_action( 'wp_ajax_nopriv_cscf-submitform', 'ct_ajax_hook',1 );
66
  add_action( 'wp_ajax_cscf-submitform', 'ct_ajax_hook',1 );
67
+ $cleantalk_hooked_actions[]='cscf-submitform';
68
 
69
  /*hooks for stats */
70
  add_action( 'wp_ajax_nopriv_ajax_get_stats', 'ct_get_stats',1 );
71
  add_action( 'wp_ajax_ajax_get_stats', 'ct_get_stats',1 );
72
+ $cleantalk_hooked_actions[]='ajax_get_stats';
73
 
74
  /*hooks for visual form builder */
75
  //add_action( 'wp_ajax_nopriv_vfb_submit', 'ct_vfb_submit',1 );
76
  //add_action( 'wp_ajax_vfb_submit', 'ct_vfb_submit',1 );
77
  add_action( 'wp_ajax_nopriv_vfb_submit', 'ct_ajax_hook',1 );
78
  add_action( 'wp_ajax_vfb_submit', 'ct_ajax_hook',1 );
79
+ $cleantalk_hooked_actions[]='vfb_submit';
80
 
81
  /*hooks for woocommerce_checkout*/
82
  add_action( 'wp_ajax_nopriv_woocommerce_checkout', 'ct_ajax_hook',1 );
83
  add_action( 'wp_ajax_woocommerce_checkout', 'ct_ajax_hook',1 );
84
+ $cleantalk_hooked_actions[]='woocommerce_checkout';
85
 
86
  /*hooks for frm_action*/
87
  add_action( 'wp_ajax_nopriv_frm_entries_create', 'ct_ajax_hook',1 );
88
  add_action( 'wp_ajax_frm_entries_create', 'ct_ajax_hook',1 );
89
+ $cleantalk_hooked_actions[]='frm_entries_create';
90
 
91
  add_action( 'wp_ajax_nopriv_td_mod_register', 'ct_ajax_hook',1 );
92
  add_action( 'wp_ajax_td_mod_register', 'ct_ajax_hook',1 );
93
+ $cleantalk_hooked_actions[]='td_mod_register';
94
 
95
  /*hooks for tevolution theme*/
96
  add_action( 'wp_ajax_nopriv_tmpl_ajax_check_user_email', 'ct_ajax_hook',1 );
99
  add_action( 'wp_ajax_tevolution_submit_from_preview', 'ct_ajax_hook',1 );
100
  add_action( 'wp_ajax_nopriv_submit_form_recaptcha_validation', 'ct_ajax_hook',1 );
101
  add_action( 'wp_ajax_tmpl_submit_form_recaptcha_validation', 'ct_ajax_hook',1 );
102
+ $cleantalk_hooked_actions[]='tmpl_ajax_check_user_email';
103
+ $cleantalk_hooked_actions[]='tevolution_submit_from_preview';
104
+ $cleantalk_hooked_actions[]='submit_form_recaptcha_validation';
105
 
106
  /**hooks for cm answers pro */
107
  add_action( 'template_redirect', 'ct_ajax_hook',1 );
109
  /* hooks for ninja forms ajax*/
110
  add_action( 'wp_ajax_nopriv_ninja_forms_ajax_submit', 'ct_ajax_hook',1 );
111
  add_action( 'wp_ajax_ninja_forms_ajax_submit', 'ct_ajax_hook',1 );
112
+ $cleantalk_hooked_actions[]='ninja_forms_ajax_submit';
113
 
114
  function ct_get_stats()
115
  {
473
  print '{"form_id":'.$_POST['_form_id'].',"errors":false,"success":{"success_msg-Success":"'.$ct_result->comment.'"}}';
474
  die();
475
  }
476
+ else
477
+ {
478
+ print $ct_result->comment;
479
+ die();
480
+ }
481
  }
482
  }
483
  }
inc/cleantalk-common.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- $ct_agent_version = 'wordpress-5331';
4
  $ct_plugin_name = 'Anti-spam by CleanTalk';
5
  $ct_checkjs_frm = 'ct_checkjs_frm';
6
  $ct_checkjs_register_form = 'ct_checkjs_register_form';
@@ -101,7 +101,8 @@ $ct_data=ct_get_data();
101
  * Public action 'plugins_loaded' - Loads locale, see http://codex.wordpress.org/Function_Reference/load_plugin_textdomain
102
  */
103
  function ct_plugin_loaded() {
104
- load_plugin_textdomain('cleantalk', false, basename(dirname(__FILE__)) . '/i18n');
 
105
  }
106
 
107
  /**
@@ -176,8 +177,10 @@ function ct_base_call($params = array()) {
176
  $ct_request->last_error_time=$ct_data['last_error_time'];
177
  $ct_request->last_error_text=$ct_data['last_error_text'];
178
  }
 
 
179
 
180
- $ct_result = $ct->isAllowMessage($ct_request);
181
  if ($ct->server_change) {
182
  update_option(
183
  'cleantalk_server', array(
@@ -256,6 +259,7 @@ function get_sender_info() {
256
  if (isset($_COOKIE['ct_checkjs'])) {
257
  $checkjs_data_cookies = $_COOKIE['ct_checkjs'];
258
  }
 
259
 
260
  $checkjs_data_post = null;
261
  if (count($_POST) > 0) {
@@ -284,6 +288,15 @@ function get_sender_info() {
284
  $js_info=stripslashes(rawurldecode($_COOKIE['ct_user_info']));
285
  $js_info=mb_convert_encoding($js_info, "UTF-8", "Windows-1252");
286
  }
 
 
 
 
 
 
 
 
 
287
 
288
  return $sender_info = array(
289
  'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
@@ -298,6 +311,7 @@ function get_sender_info() {
298
  'ct_options' => json_encode($options2server),
299
  'fields_number' => sizeof($_POST),
300
  'js_info' => $js_info,
 
301
  );
302
  }
303
 
1
  <?php
2
 
3
+ $ct_agent_version = 'wordpress-534';
4
  $ct_plugin_name = 'Anti-spam by CleanTalk';
5
  $ct_checkjs_frm = 'ct_checkjs_frm';
6
  $ct_checkjs_register_form = 'ct_checkjs_register_form';
101
  * Public action 'plugins_loaded' - Loads locale, see http://codex.wordpress.org/Function_Reference/load_plugin_textdomain
102
  */
103
  function ct_plugin_loaded() {
104
+ $dir=plugin_basename( dirname( __FILE__ ) ) . '/../i18n';
105
+ $loaded=load_plugin_textdomain('cleantalk', false, $dir);
106
  }
107
 
108
  /**
177
  $ct_request->last_error_time=$ct_data['last_error_time'];
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) {
185
  update_option(
186
  'cleantalk_server', array(
259
  if (isset($_COOKIE['ct_checkjs'])) {
260
  $checkjs_data_cookies = $_COOKIE['ct_checkjs'];
261
  }
262
+
263
 
264
  $checkjs_data_post = null;
265
  if (count($_POST) > 0) {
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
 
301
  return $sender_info = array(
302
  'page_url' => htmlspecialchars(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']),
311
  'ct_options' => json_encode($options2server),
312
  'fields_number' => sizeof($_POST),
313
  'js_info' => $js_info,
314
+ 'ct_first_referer' => $ct_first_referer,
315
  );
316
  }
317
 
inc/cleantalk-public.php CHANGED
@@ -9,6 +9,18 @@ function ct_init() {
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' ))
@@ -1004,9 +1016,19 @@ function ct_test_registration($nickname, $email, $ip){
1004
 
1005
  $ct_result = $ct->isAllowUser($ct_request);
1006
 
1007
- if ($ct_result->errno != 0 && $checkjs==0)
1008
  {
1009
- $ct_result->allow=0;
 
 
 
 
 
 
 
 
 
 
1010
  }
1011
 
1012
  $result=Array(
@@ -1122,13 +1144,23 @@ function ct_registration_errors($errors, $sanitized_user_login = null, $user_ema
1122
 
1123
  $ct_signup_done = true;
1124
 
1125
- if ($ct_result->errno != 0 && $ct_options['notice_api_errors']) {
1126
  ct_send_error_notice($ct_result->comment);
1127
  return $errors;
1128
- }
1129
- if ($ct_result->errno != 0 && $checkjs==0)
1130
  {
1131
- $ct_result->allow=0;
 
 
 
 
 
 
 
 
 
 
1132
  }
1133
 
1134
  if ($ct_result->inactive != 0) {
@@ -1672,8 +1704,19 @@ function ct_s2member_registration_test() {
1672
  );
1673
  }
1674
 
1675
- if ($ct_result->errno != 0) {
1676
- return false;
 
 
 
 
 
 
 
 
 
 
 
1677
  }
1678
 
1679
  // Restart submit form counter for failed requests
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' ))
1016
 
1017
  $ct_result = $ct->isAllowUser($ct_request);
1018
 
1019
+ if(@intval($ct_result->errno) != 0)
1020
  {
1021
+ if($params['checkjs']!=1)
1022
+ {
1023
+ $ct_result->allow = 0;
1024
+ $ct_result->spam = 1;
1025
+ $ct_result->comment=__( 'Forbidden. Please, enable Javascript.', 'cleantalk' );
1026
+ }
1027
+ else
1028
+ {
1029
+ $ct_result->allow = 1;
1030
+ $ct_result->comment=__( 'Allow', 'cleantalk' );
1031
+ }
1032
  }
1033
 
1034
  $result=Array(
1144
 
1145
  $ct_signup_done = true;
1146
 
1147
+ /*if ($ct_result->errno != 0 && $ct_options['notice_api_errors']) {
1148
  ct_send_error_notice($ct_result->comment);
1149
  return $errors;
1150
+ }*/
1151
+ if(@intval($ct_result->errno) != 0)
1152
  {
1153
+ if($params['checkjs']!=1)
1154
+ {
1155
+ $ct_result->allow = 0;
1156
+ $ct_result->spam = 1;
1157
+ $ct_result->comment=__( 'Forbidden. Please, enable Javascript.', 'cleantalk' );
1158
+ }
1159
+ else
1160
+ {
1161
+ $ct_result->allow = 1;
1162
+ $ct_result->comment=__( 'Allow', 'cleantalk' );
1163
+ }
1164
  }
1165
 
1166
  if ($ct_result->inactive != 0) {
1704
  );
1705
  }
1706
 
1707
+ if(@intval($ct_result->errno) != 0)
1708
+ {
1709
+ if($params['checkjs']!=1)
1710
+ {
1711
+ $ct_result->allow = 0;
1712
+ $ct_result->spam = 1;
1713
+ $ct_result->comment=__( 'Forbidden. Please, enable Javascript.', 'cleantalk' );
1714
+ }
1715
+ else
1716
+ {
1717
+ $ct_result->allow = 1;
1718
+ $ct_result->comment=__( 'Allow', 'cleantalk' );
1719
+ }
1720
  }
1721
 
1722
  // Restart submit form counter for failed requests
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: znaeff, shagimuratov, vlad-cleantalk
3
  Tags: anti-spam, antispam, bbpress, buddypress, captcha, capcha, captha, catcha, 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, contact, recaptcha, google captcha, math, security, login, blacklist, cache, prevent, wordpress, User Frontend, bulk delete, bulk remove, cloudflare, widget, review, auth forms, firewall, ddos, cleantalk, mailpoet, profile builder, comment spam, registration spam, spam comments, comment moderation, spam bots, block spam, signup spam, spam blocker, spam filter, user registration spam,pingback,trackback
4
  Requires at least: 3.0
5
  Tested up to: 4.4
6
- Stable tag: 5.33.1
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -80,7 +80,7 @@ https://s.w.org/plugins/cleantalk-spam-protect/screenshot-5.png?r=1288723
80
 
81
  The team CleanTalk has been developing a cloud spam protection system for 5 years and has created a truly reliable anti spam service designed for you to ensure your safety.
82
 
83
- = Spam attacks log =
84
  Service CleanTalk (this plugin is a client application for CleanTalk anti-spam service) records all filtered comments, registration and other spam attacks in the "Log of spam attacks" and stores the data in the log up to 45 days. Using the log, you can ensure reliable protection of your website from spam and no false/positive filtering.
85
 
86
  = Spam FireWall =
@@ -415,6 +415,12 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
415
  1. CleanTalk works faster than most of the other anti-spam plugins.
416
 
417
  == Changelog ==
 
 
 
 
 
 
418
  = 5.33.1 2015-12-04 =
419
  * Fixed issue with BBPress: restored old user permission checking mechanism
420
  * Fixed anti-spam comments checking: sometimes get_comments returned wrong comments number
@@ -931,6 +937,12 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
931
  * First version
932
 
933
  == Upgrade Notice ==
 
 
 
 
 
 
934
  = 5.33.1 2015-12-04 =
935
  * Fixed issue with BBPress
936
  * Fixed anti-spam comments checking
3
  Tags: anti-spam, antispam, bbpress, buddypress, captcha, capcha, captha, catcha, 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, contact, recaptcha, google captcha, math, security, login, blacklist, cache, prevent, wordpress, User Frontend, bulk delete, bulk remove, cloudflare, widget, review, auth forms, firewall, ddos, cleantalk, mailpoet, profile builder, comment spam, registration spam, spam comments, comment moderation, spam bots, block spam, signup spam, spam blocker, spam filter, user registration spam,pingback,trackback
4
  Requires at least: 3.0
5
  Tested up to: 4.4
6
+ Stable tag: 5.34
7
  License: GPLv2
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
80
 
81
  The team CleanTalk has been developing a cloud spam protection system for 5 years and has created a truly reliable anti spam service designed for you to ensure your safety.
82
 
83
+ = Spam attacks log =
84
  Service CleanTalk (this plugin is a client application for CleanTalk anti-spam service) records all filtered comments, registration and other spam attacks in the "Log of spam attacks" and stores the data in the log up to 45 days. Using the log, you can ensure reliable protection of your website from spam and no false/positive filtering.
85
 
86
  = Spam FireWall =
415
  1. CleanTalk works faster than most of the other anti-spam plugins.
416
 
417
  == Changelog ==
418
+ = 5.34 2015-12-10 =
419
+ * Improved spam checking mechanism
420
+ * Added "Collect browser details" option for better antispam protection
421
+ * Fixed custom contact forms checking for AJAX requests
422
+ * Minor translations fixes
423
+
424
  = 5.33.1 2015-12-04 =
425
  * Fixed issue with BBPress: restored old user permission checking mechanism
426
  * Fixed anti-spam comments checking: sometimes get_comments returned wrong comments number
937
  * First version
938
 
939
  == Upgrade Notice ==
940
+ = 5.34 2015-12-10 =
941
+ * Improved spam checking mechanism
942
+ * Added "Collect browser details" option for better antispam protection
943
+ * Fixed custom contact forms checking for AJAX requests
944
+ * Minor translations fixes
945
+
946
  = 5.33.1 2015-12-04 =
947
  * Fixed issue with BBPress
948
  * Fixed anti-spam comments checking