Version Description
2016-06-15 = * Added anti-spam protection for UserPro. * Improved protection for Formidable forms + Varnish. * Improved bulk search for spam accounts. * Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID. * Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection. * Minor fixes in plugin backend.
Download this release
Release Info
Developer | shagimuratov |
Plugin | Spam protection, AntiSpam, FireWall by CleanTalk |
Version | 5.42 |
Comparing to | |
See all releases |
Code changes from version 5.41 to 5.42
- cleantalk.php +3 -3
- inc/cleantalk-admin.php +13 -18
- inc/cleantalk-ajax.php +11 -24
- inc/cleantalk-common.php +92 -1
- inc/cleantalk-public.php +77 -44
- inc/cleantalk-stats.js +0 -20
- inc/cleantalk-users-checkspam.js +35 -8
- inc/cleantalk-users.php +107 -71
- readme.txt +72 -55
cleantalk.php
CHANGED
@@ -3,12 +3,12 @@
|
|
3 |
Plugin Name: Spam Protection 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. Formerly Anti-Spam by CleanTalk.
|
6 |
-
Version: 5.
|
7 |
Author: СleanTalk <welcome@cleantalk.org>
|
8 |
Author URI: http://cleantalk.org
|
9 |
*/
|
10 |
-
$cleantalk_plugin_version='5.
|
11 |
-
$ct_agent_version = 'wordpress-
|
12 |
$cleantalk_executed=false;
|
13 |
$ct_sfw_updated = false;
|
14 |
|
3 |
Plugin Name: Spam Protection 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. Formerly Anti-Spam by CleanTalk.
|
6 |
+
Version: 5.42
|
7 |
Author: СleanTalk <welcome@cleantalk.org>
|
8 |
Author URI: http://cleantalk.org
|
9 |
*/
|
10 |
+
$cleantalk_plugin_version='5.42';
|
11 |
+
$ct_agent_version = 'wordpress-542';
|
12 |
$cleantalk_executed=false;
|
13 |
$ct_sfw_updated = false;
|
14 |
|
inc/cleantalk-admin.php
CHANGED
@@ -35,22 +35,6 @@ function cleantalk_custom_glance_items( )
|
|
35 |
$ct_server_timeout = 10;
|
36 |
|
37 |
|
38 |
-
/**
|
39 |
-
* Admin action 'admin_print_footer_scripts' - Enqueue admin script for checking if timezone offset is saved in settings
|
40 |
-
*/
|
41 |
-
if(isset($ct_options['show_adminbar']) && @intval($ct_options['show_adminbar']) == 1)
|
42 |
-
{
|
43 |
-
add_action( 'admin_print_footer_scripts', 'ct_add_stats_js' );
|
44 |
-
}
|
45 |
-
|
46 |
-
function ct_add_stats_js()
|
47 |
-
{
|
48 |
-
echo "<script src='".plugins_url( 'cleantalk-stats.js', __FILE__ )."'></script>\n";
|
49 |
-
}
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
/**
|
55 |
* Admin action 'wp_ajax_ajax_get_timezone' - Ajax method for getting timezone offset
|
56 |
*/
|
@@ -441,9 +425,20 @@ function ct_add_admin_menu( $wp_admin_bar ) {
|
|
441 |
if ( current_user_can('activate_plugins')&&$value==1 )
|
442 |
{
|
443 |
//$ct_data=ct_get_data();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
444 |
$args = array(
|
445 |
'id' => 'ct_parent_node',
|
446 |
-
'title' => '<img src="' . plugin_dir_url(__FILE__) . 'images/logo_small1.png" alt="" height="" style="margin-top:9px;" /><a href="#" class="ab-item alignright" title="
|
447 |
);
|
448 |
$wp_admin_bar->add_node( $args );
|
449 |
|
@@ -734,7 +729,7 @@ function ct_input_show_adminbar() {
|
|
734 |
echo "<input type='radio' id='cleantalk_show_adminbar1' name='cleantalk_settings[show_adminbar]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='cleantalk_show_adminbar1'> " . __('Yes') . "</label>";
|
735 |
echo ' ';
|
736 |
echo "<input type='radio' id='cleantalk_show_adminbar0' name='cleantalk_settings[show_adminbar]' value='0' " . ($value == '0' ? 'checked' : '') . " /><label for='cleantalk_show_adminbar0'> " . __('No') . "</label>";
|
737 |
-
admin_addDescriptionsFields(sprintf(__('Show/hide CleanTalk icon in top level menu in WordPress backend.', 'cleantalk'), $ct_options['show_adminbar']));
|
738 |
}
|
739 |
|
740 |
/**
|
35 |
$ct_server_timeout = 10;
|
36 |
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
/**
|
39 |
* Admin action 'wp_ajax_ajax_get_timezone' - Ajax method for getting timezone offset
|
40 |
*/
|
425 |
if ( current_user_can('activate_plugins')&&$value==1 )
|
426 |
{
|
427 |
//$ct_data=ct_get_data();
|
428 |
+
$ct_data=ct_get_data();
|
429 |
+
|
430 |
+
if(!isset($ct_data['array_accepted']))
|
431 |
+
{
|
432 |
+
$ct_data['array_accepted']=Array();
|
433 |
+
$ct_data['array_blocked']=Array();
|
434 |
+
$ct_data['current_hour']=0;
|
435 |
+
update_option('cleantalk_data', $ct_data);
|
436 |
+
}
|
437 |
+
|
438 |
+
$ret=Array('stat_accepted'=>@array_sum($ct_data['array_accepted']), 'stat_blocked'=>@array_sum($ct_data['array_blocked']), 'stat_all'=>@array_sum($ct_data['array_accepted']) + @array_sum($ct_data['array_blocked']));
|
439 |
$args = array(
|
440 |
'id' => 'ct_parent_node',
|
441 |
+
'title' => '<img src="' . plugin_dir_url(__FILE__) . 'images/logo_small1.png" alt="" height="" style="margin-top:9px;" /><a href="#" class="ab-item alignright" title="Allowed/Blocked submissions. The number of submissions is being counted for past 24 hours." alt="allowed / blocked"><span class="ab-label" id="ct_stats"><span>' . $ret['stat_accepted'] . '</span> / <span>' . $ret['stat_blocked'] . '</span></span></a>'
|
442 |
);
|
443 |
$wp_admin_bar->add_node( $args );
|
444 |
|
729 |
echo "<input type='radio' id='cleantalk_show_adminbar1' name='cleantalk_settings[show_adminbar]' value='1' " . ($value == '1' ? 'checked' : '') . " /><label for='cleantalk_show_adminbar1'> " . __('Yes') . "</label>";
|
730 |
echo ' ';
|
731 |
echo "<input type='radio' id='cleantalk_show_adminbar0' name='cleantalk_settings[show_adminbar]' value='0' " . ($value == '0' ? 'checked' : '') . " /><label for='cleantalk_show_adminbar0'> " . __('No') . "</label>";
|
732 |
+
admin_addDescriptionsFields(sprintf(__('Show/hide CleanTalk icon in top level menu in WordPress backend. The number of submissions is being counted for past 24 hours.', 'cleantalk'), $ct_options['show_adminbar']));
|
733 |
}
|
734 |
|
735 |
/**
|
inc/cleantalk-ajax.php
CHANGED
@@ -66,11 +66,6 @@ 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 );
|
@@ -111,25 +106,6 @@ 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 |
-
{
|
116 |
-
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
117 |
-
global $ct_data;
|
118 |
-
$ct_data=ct_get_data();
|
119 |
-
|
120 |
-
if(!isset($ct_data['array_accepted']))
|
121 |
-
{
|
122 |
-
$ct_data['array_accepted']=Array();
|
123 |
-
$ct_data['array_blocked']=Array();
|
124 |
-
$ct_data['current_hour']=0;
|
125 |
-
update_option('cleantalk_data', $ct_data);
|
126 |
-
}
|
127 |
-
|
128 |
-
$ret=Array('stat_accepted'=>@array_sum($ct_data['array_accepted']), 'stat_blocked'=>@array_sum($ct_data['array_blocked']), 'stat_all'=>@array_sum($ct_data['array_accepted']) + @array_sum($ct_data['array_blocked']));
|
129 |
-
print json_encode($ret);
|
130 |
-
die();
|
131 |
-
}
|
132 |
-
|
133 |
function ct_validate_email_ajaxlogin($email=null, $is_ajax=true)
|
134 |
{
|
135 |
require_once(CLEANTALK_PLUGIN_DIR . 'cleantalk-public.php');
|
@@ -502,6 +478,17 @@ function ct_ajax_hook()
|
|
502 |
print json_encode($result);
|
503 |
die();
|
504 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
505 |
else
|
506 |
{
|
507 |
print $ct_result->comment;
|
66 |
add_action( 'wp_ajax_cscf-submitform', 'ct_ajax_hook',1 );
|
67 |
$cleantalk_hooked_actions[]='cscf-submitform';
|
68 |
|
|
|
|
|
|
|
|
|
|
|
69 |
/*hooks for visual form builder */
|
70 |
//add_action( 'wp_ajax_nopriv_vfb_submit', 'ct_vfb_submit',1 );
|
71 |
//add_action( 'wp_ajax_vfb_submit', 'ct_vfb_submit',1 );
|
106 |
add_action( 'wp_ajax_ninja_forms_ajax_submit', 'ct_ajax_hook',1 );
|
107 |
$cleantalk_hooked_actions[]='ninja_forms_ajax_submit';
|
108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
function ct_validate_email_ajaxlogin($email=null, $is_ajax=true)
|
110 |
{
|
111 |
require_once(CLEANTALK_PLUGIN_DIR . 'cleantalk-public.php');
|
478 |
print json_encode($result);
|
479 |
die();
|
480 |
}
|
481 |
+
//UserPro
|
482 |
+
else if($_POST['action']=='userpro_process_form' && $_POST['template']=='register')
|
483 |
+
{
|
484 |
+
foreach($_POST as $key => $value){
|
485 |
+
$output[$key]=$value;
|
486 |
+
}unset($key, $value);
|
487 |
+
$output['template'] = $ct_result->comment;
|
488 |
+
$output=json_encode($output);
|
489 |
+
print_r($output);
|
490 |
+
die;
|
491 |
+
}
|
492 |
else
|
493 |
{
|
494 |
print $ct_result->comment;
|
inc/cleantalk-common.php
CHANGED
@@ -606,7 +606,6 @@ function delete_spam_comments() {
|
|
606 |
/*
|
607 |
* Get data from submit recursively
|
608 |
*/
|
609 |
-
|
610 |
function ct_get_fields_any(&$email,&$message,&$nickname,&$subject, &$contact,$arr)
|
611 |
{
|
612 |
$skip_params = array(
|
@@ -680,6 +679,98 @@ function ct_get_fields_any(&$email,&$message,&$nickname,&$subject, &$contact,$ar
|
|
680 |
}
|
681 |
}
|
682 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
683 |
/**
|
684 |
* Masks a value with asterisks (*)
|
685 |
* @return string
|
606 |
/*
|
607 |
* Get data from submit recursively
|
608 |
*/
|
|
|
609 |
function ct_get_fields_any(&$email,&$message,&$nickname,&$subject, &$contact,$arr)
|
610 |
{
|
611 |
$skip_params = array(
|
679 |
}
|
680 |
}
|
681 |
|
682 |
+
/*
|
683 |
+
* Get data from an ARRAY recursively
|
684 |
+
* @return array
|
685 |
+
*/
|
686 |
+
function ct_get_fields_any2($arr, $message=array(), $email=NULL, $nickname=NULL, $subject=NULL, $contact=true) {
|
687 |
+
$skip_params = array(
|
688 |
+
'ipn_track_id', // PayPal IPN #
|
689 |
+
'txn_type', // PayPal transaction type
|
690 |
+
'payment_status', // PayPal payment status
|
691 |
+
'ccbill_ipn' //CCBill IPN
|
692 |
+
);
|
693 |
+
$obfuscate_params = array(
|
694 |
+
'password',
|
695 |
+
'password0',
|
696 |
+
'password1',
|
697 |
+
'password2',
|
698 |
+
'pass',
|
699 |
+
'pwd',
|
700 |
+
'user_pass'
|
701 |
+
);
|
702 |
+
foreach($skip_params as $key=>$value)
|
703 |
+
{
|
704 |
+
if(@array_key_exists($value,$_GET)||@array_key_exists($value,$_POST))
|
705 |
+
{
|
706 |
+
$contact = false;
|
707 |
+
}
|
708 |
+
}
|
709 |
+
foreach($arr as $key=>$value)
|
710 |
+
{
|
711 |
+
if(!is_array($value)&&!is_object($value)&&@get_class($value)!='WP_User')
|
712 |
+
{
|
713 |
+
if (in_array($key, $skip_params) && $key!=0 && $key!='' || preg_match("/^ct_checkjs/", $key)) {
|
714 |
+
$contact = false;
|
715 |
+
}
|
716 |
+
if (!$email && @preg_match("/^\S+@\S+\.\S+$/", $value))
|
717 |
+
{
|
718 |
+
$email = $value;
|
719 |
+
}
|
720 |
+
else if ($nickname === '' && ct_get_data_from_submit($key, 'name'))
|
721 |
+
{
|
722 |
+
$nickname = $value;
|
723 |
+
}
|
724 |
+
else if ($subject === '' && ct_get_data_from_submit($key, 'subject'))
|
725 |
+
{
|
726 |
+
$subject = $value;
|
727 |
+
}
|
728 |
+
else
|
729 |
+
{
|
730 |
+
//
|
731 |
+
// Obfuscate private data
|
732 |
+
//
|
733 |
+
if (in_array($key, $obfuscate_params)) {
|
734 |
+
$value = ct_obfuscate_param($value);
|
735 |
+
}
|
736 |
+
$message[$key] = $value;
|
737 |
+
}
|
738 |
+
}
|
739 |
+
else if(!is_object($value)&&@get_class($value)!='WP_User')
|
740 |
+
{
|
741 |
+
$temp = ct_get_fields_any2($value, $message, $email, $nickname, $subject, $contact);
|
742 |
+
|
743 |
+
$email = ($temp['email'] ? $temp['email'] : '');
|
744 |
+
$nickname = ($temp['nickname'] ? $temp['nickname'] : '');
|
745 |
+
$subject = ($temp['subject'] ? $temp['subject'] : '');
|
746 |
+
$contact = ($temp['contact'] ? $temp['contact'] : '');
|
747 |
+
$message = (count($temp['message']) == 0 ? $message : array_merge($message, $temp['message']));
|
748 |
+
}
|
749 |
+
}
|
750 |
+
//
|
751 |
+
// Reset $message if we have a sign-up data
|
752 |
+
//
|
753 |
+
$skip_message_post = array(
|
754 |
+
'edd_action', // Easy Digital Downloads
|
755 |
+
);
|
756 |
+
foreach ($skip_message_post as $v) {
|
757 |
+
if (isset($_POST[$v])) {
|
758 |
+
$message = null;
|
759 |
+
break;
|
760 |
+
}
|
761 |
+
}
|
762 |
+
|
763 |
+
$return_param = array(
|
764 |
+
'email' => $email,
|
765 |
+
'nickname' => $nickname,
|
766 |
+
'subject' => $subject,
|
767 |
+
'contact' => $contact,
|
768 |
+
'message' => $message
|
769 |
+
);
|
770 |
+
|
771 |
+
return $return_param;
|
772 |
+
}
|
773 |
+
|
774 |
/**
|
775 |
* Masks a value with asterisks (*)
|
776 |
* @return string
|
inc/cleantalk-public.php
CHANGED
@@ -121,7 +121,7 @@ function ct_init() {
|
|
121 |
|
122 |
// Formidable
|
123 |
if(class_exists('FrmSettings')){
|
124 |
-
add_action('frm_validate_entry', 'ct_frm_validate_entry',
|
125 |
add_action('frm_entries_footer_scripts', 'ct_frm_entries_footer_scripts', 20, 2);
|
126 |
}
|
127 |
|
@@ -167,6 +167,7 @@ function ct_init() {
|
|
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 |
|
@@ -258,16 +259,7 @@ function ct_footer_add_cookie() {
|
|
258 |
function ct_add_hidden_fields($random_key = false, $field_name = 'ct_checkjs', $return_string = false, $cookie_check = false) {
|
259 |
global $ct_checkjs_def, $ct_plugin_name, $ct_options, $ct_data;
|
260 |
$ct_options = ct_get_options();
|
261 |
-
|
262 |
-
if(isset($ct_options['use_ajax']))
|
263 |
-
{
|
264 |
-
$use_ajax = @intval($ct_options['use_ajax']);
|
265 |
-
}
|
266 |
-
else
|
267 |
-
{
|
268 |
-
$use_ajax=1;
|
269 |
-
}
|
270 |
-
|
271 |
$ct_checkjs_key = ct_get_checkjs_value($random_key);
|
272 |
$field_id_hash = md5(rand(0, 1000));
|
273 |
|
@@ -288,17 +280,16 @@ ctSetCookie("%s", "%s", "%s");
|
|
288 |
$html = '
|
289 |
<input type="hidden" id="%s" name="%s" value="%s" />
|
290 |
<script type="text/javascript">
|
291 |
-
setTimeout(function(){
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
</script>
|
293 |
';
|
294 |
$html = sprintf($html, $field_id, $field_name, $ct_checkjs_def, $field_id, $ct_input_challenge);
|
295 |
-
/*!!! IT'S A TEMPORARILY CODE FOR DEBUGGING CF7 !!!*/
|
296 |
-
if($use_ajax==1)
|
297 |
-
{
|
298 |
-
$html='<input type="hidden" id="%s" name="%s" value="%s" />';
|
299 |
-
$html = sprintf($html, $field_id, $field_name, $ct_checkjs_def);
|
300 |
-
}
|
301 |
-
/*!!! IT'S A TEMPORARILY CODE FOR DEBUGGING CF7 !!!*/
|
302 |
};
|
303 |
|
304 |
// Simplify JS code
|
@@ -338,17 +329,34 @@ function ct_is_user_enable() {
|
|
338 |
* return null;
|
339 |
*/
|
340 |
function ct_frm_entries_footer_scripts($fields, $form) {
|
341 |
-
global $ct_options;
|
342 |
|
343 |
if ($ct_options['contact_forms_test'] == 0) {
|
344 |
return false;
|
345 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
$js_code = ct_add_hidden_fields(true, 'ct_checkjs', true, true);
|
|
|
|
|
347 |
?>
|
348 |
<?php echo $js_code; ?>
|
349 |
<?php
|
350 |
-
|
351 |
-
return null;
|
352 |
}
|
353 |
|
354 |
/**
|
@@ -366,25 +374,30 @@ function ct_frm_validate_entry ($errors, $values) {
|
|
366 |
}
|
367 |
|
368 |
$checkjs = js_test('ct_checkjs', $_COOKIE, true);
|
|
|
|
|
|
|
369 |
|
370 |
$post_info['comment_type'] = 'feedback';
|
371 |
$post_info = json_encode($post_info);
|
372 |
if ($post_info === false)
|
373 |
$post_info = '';
|
374 |
|
375 |
-
|
376 |
-
|
377 |
-
$
|
378 |
-
$
|
379 |
-
$
|
380 |
-
|
|
|
|
|
381 |
$message = json_encode($message);
|
382 |
|
383 |
$ct_base_call_result = ct_base_call(array(
|
384 |
'message' => $message,
|
385 |
'example' => null,
|
386 |
'sender_email' => $sender_email,
|
387 |
-
'sender_nickname' =>
|
388 |
'post_info' => $post_info,
|
389 |
'checkjs' => $checkjs
|
390 |
));
|
@@ -1584,6 +1597,25 @@ function ct_check_wplp(){
|
|
1584 |
ct_die_extended($cleantalk_comment);
|
1585 |
}
|
1586 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1587 |
/**
|
1588 |
* Gravity forms anti-spam test.
|
1589 |
* @return boolean
|
@@ -1606,12 +1638,15 @@ function ct_gforms_spam_test ($is_spam, $form, $entry) {
|
|
1606 |
if ($cleantalk_executed) {
|
1607 |
return $is_spam;
|
1608 |
}
|
1609 |
-
|
1610 |
$sender_info='';
|
1611 |
|
1612 |
$checkjs = js_test('ct_checkjs', $_COOKIE, true);
|
1613 |
-
|
1614 |
-
|
|
|
|
|
|
|
1615 |
$post_info = json_encode($post_info);
|
1616 |
if ($post_info === false)
|
1617 |
$post_info = '';
|
@@ -1620,16 +1655,13 @@ function ct_gforms_spam_test ($is_spam, $form, $entry) {
|
|
1620 |
$sender_nickname = null;
|
1621 |
$subject = '';
|
1622 |
$message = '';
|
1623 |
-
|
1624 |
-
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
$sender_email = $v;
|
1629 |
-
continue;
|
1630 |
-
}
|
1631 |
-
$message.= $v."\n";
|
1632 |
}
|
|
|
1633 |
|
1634 |
$ct_base_call_result = ct_base_call(array(
|
1635 |
'message' => $message,
|
@@ -1739,7 +1771,7 @@ function ct_s2member_registration_test() {
|
|
1739 |
* General test for any contact form
|
1740 |
*/
|
1741 |
function ct_contact_form_validate () {
|
1742 |
-
global $pagenow,$cleantalk_executed, $cleantalk_url_exclusions,$ct_options, $ct_data;
|
1743 |
|
1744 |
$ct_options = ct_get_options();
|
1745 |
$ct_data = ct_get_data();
|
@@ -1758,7 +1790,7 @@ function ct_contact_form_validate () {
|
|
1758 |
}
|
1759 |
//@header("CtExclusions: ".$ct_cnt);
|
1760 |
cleantalk_debug("CtExclusions", $ct_cnt);
|
1761 |
-
|
1762 |
if (@sizeof($_POST)==0 ||
|
1763 |
(isset($_POST['signup_username']) && isset($_POST['signup_email']) && isset($_POST['signup_password'])) ||
|
1764 |
(isset($pagenow) && $pagenow == 'wp-login.php') || // WordPress log in form
|
@@ -1780,7 +1812,8 @@ function ct_contact_form_validate () {
|
|
1780 |
isset($_COOKIE[LOGGED_IN_COOKIE]) ||
|
1781 |
isset($_POST['fscf_submitted']) ||
|
1782 |
strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false ||
|
1783 |
-
isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit'])
|
|
|
1784 |
) {
|
1785 |
return null;
|
1786 |
}
|
121 |
|
122 |
// Formidable
|
123 |
if(class_exists('FrmSettings')){
|
124 |
+
add_action('frm_validate_entry', 'ct_frm_validate_entry', 1, 2);
|
125 |
add_action('frm_entries_footer_scripts', 'ct_frm_entries_footer_scripts', 20, 2);
|
126 |
}
|
127 |
|
167 |
// Gravity forms
|
168 |
//
|
169 |
if (defined('GF_MIN_WP_VERSION')) {
|
170 |
+
add_filter('gform_get_form_filter', 'ct_gforms_hidden_field', 10, 2);
|
171 |
add_filter('gform_entry_is_spam', 'ct_gforms_spam_test', 1, 3);
|
172 |
}
|
173 |
|
259 |
function ct_add_hidden_fields($random_key = false, $field_name = 'ct_checkjs', $return_string = false, $cookie_check = false) {
|
260 |
global $ct_checkjs_def, $ct_plugin_name, $ct_options, $ct_data;
|
261 |
$ct_options = ct_get_options();
|
262 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
$ct_checkjs_key = ct_get_checkjs_value($random_key);
|
264 |
$field_id_hash = md5(rand(0, 1000));
|
265 |
|
280 |
$html = '
|
281 |
<input type="hidden" id="%s" name="%s" value="%s" />
|
282 |
<script type="text/javascript">
|
283 |
+
setTimeout(function(){
|
284 |
+
var ct_input_name = \'%s\';
|
285 |
+
if (document.getElementById(ct_input_name) !== null) {
|
286 |
+
var ct_input_value = document.getElementById(ct_input_name).value;
|
287 |
+
document.getElementById(ct_input_name).value = document.getElementById(ct_input_name).value.replace(ct_input_value, %s);
|
288 |
+
}
|
289 |
+
}, 1000);
|
290 |
</script>
|
291 |
';
|
292 |
$html = sprintf($html, $field_id, $field_name, $ct_checkjs_def, $field_id, $ct_input_challenge);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
};
|
294 |
|
295 |
// Simplify JS code
|
329 |
* return null;
|
330 |
*/
|
331 |
function ct_frm_entries_footer_scripts($fields, $form) {
|
332 |
+
global $ct_options, $ct_checkjs_frm;
|
333 |
|
334 |
if ($ct_options['contact_forms_test'] == 0) {
|
335 |
return false;
|
336 |
}
|
337 |
+
|
338 |
+
$ct_checkjs_key = ct_get_checkjs_value();
|
339 |
+
$ct_frm_base_name = 'form_';
|
340 |
+
$ct_frm_name = $ct_frm_base_name . $form->form_key;
|
341 |
+
|
342 |
+
?>
|
343 |
+
var input = document.createElement("input");
|
344 |
+
input.setAttribute("type", "hidden");
|
345 |
+
input.setAttribute("name", "<?php echo $ct_checkjs_frm; ?>");
|
346 |
+
input.setAttribute("value", "<?php echo $ct_checkjs_key; ?>");
|
347 |
+
|
348 |
+
for (i = 0; i < document.forms.length; i++) {
|
349 |
+
if (document.forms[i].id && document.forms[i].id.search("<?php echo $ct_frm_name; ?>") != -1) {
|
350 |
+
document.forms[i].appendChild(input);
|
351 |
+
}
|
352 |
+
}
|
353 |
+
<?php
|
354 |
$js_code = ct_add_hidden_fields(true, 'ct_checkjs', true, true);
|
355 |
+
$js_code = strip_tags($js_code); // Removing <script> tag
|
356 |
+
|
357 |
?>
|
358 |
<?php echo $js_code; ?>
|
359 |
<?php
|
|
|
|
|
360 |
}
|
361 |
|
362 |
/**
|
374 |
}
|
375 |
|
376 |
$checkjs = js_test('ct_checkjs', $_COOKIE, true);
|
377 |
+
if($checkjs != 1){
|
378 |
+
$checkjs = js_test($ct_checkjs_frm, $_POST, true);
|
379 |
+
}
|
380 |
|
381 |
$post_info['comment_type'] = 'feedback';
|
382 |
$post_info = json_encode($post_info);
|
383 |
if ($post_info === false)
|
384 |
$post_info = '';
|
385 |
|
386 |
+
$temp = ct_get_fields_any2($values['item_meta']);
|
387 |
+
|
388 |
+
$sender_email = ($temp['email'] ? $temp['email'] : '');
|
389 |
+
$sender_nickname = ($temp['nickname'] ? $temp['nickname'] : '');
|
390 |
+
$subject = ($temp['subject'] ? $temp['subject'] : '');
|
391 |
+
$contact_form = ($temp['contact'] ? $temp['contact'] : true);
|
392 |
+
$message = ($temp['message'] ? $temp['message'] : array());
|
393 |
+
|
394 |
$message = json_encode($message);
|
395 |
|
396 |
$ct_base_call_result = ct_base_call(array(
|
397 |
'message' => $message,
|
398 |
'example' => null,
|
399 |
'sender_email' => $sender_email,
|
400 |
+
'sender_nickname' => $sender_nickname,
|
401 |
'post_info' => $post_info,
|
402 |
'checkjs' => $checkjs
|
403 |
));
|
1597 |
ct_die_extended($cleantalk_comment);
|
1598 |
}
|
1599 |
|
1600 |
+
/**
|
1601 |
+
* Places a hidding field to Gravity.
|
1602 |
+
* @return string
|
1603 |
+
*/
|
1604 |
+
function ct_gforms_hidden_field ( $form_string, $form ) {
|
1605 |
+
$ct_hidden_field = 'ct_checkjs';
|
1606 |
+
|
1607 |
+
// Do not add a hidden field twice.
|
1608 |
+
if (preg_match("/$ct_hidden_field/", $form_string)) {
|
1609 |
+
return $form_string;
|
1610 |
+
}
|
1611 |
+
|
1612 |
+
$search = "</form>";
|
1613 |
+
$js_code = ct_add_hidden_fields(true, $ct_hidden_field, true, false);
|
1614 |
+
$form_string = str_replace($search, $js_code . $search, $form_string);
|
1615 |
+
|
1616 |
+
return $form_string;
|
1617 |
+
}
|
1618 |
+
|
1619 |
/**
|
1620 |
* Gravity forms anti-spam test.
|
1621 |
* @return boolean
|
1638 |
if ($cleantalk_executed) {
|
1639 |
return $is_spam;
|
1640 |
}
|
1641 |
+
|
1642 |
$sender_info='';
|
1643 |
|
1644 |
$checkjs = js_test('ct_checkjs', $_COOKIE, true);
|
1645 |
+
if (!$checkjs) {
|
1646 |
+
$checkjs = js_test('ct_checkjs', $_POST, true);
|
1647 |
+
}
|
1648 |
+
|
1649 |
+
$post_info['comment_type'] = 'feedback_gravity';
|
1650 |
$post_info = json_encode($post_info);
|
1651 |
if ($post_info === false)
|
1652 |
$post_info = '';
|
1655 |
$sender_nickname = null;
|
1656 |
$subject = '';
|
1657 |
$message = '';
|
1658 |
+
|
1659 |
+
@ct_get_fields_any($sender_email, $message, $sender_nickname, $subject, $contact_form, $_POST);
|
1660 |
+
|
1661 |
+
if ($subject != '') {
|
1662 |
+
$message = array_merge(array('subject' => $subject), $message);
|
|
|
|
|
|
|
|
|
1663 |
}
|
1664 |
+
$message = json_encode($message);
|
1665 |
|
1666 |
$ct_base_call_result = ct_base_call(array(
|
1667 |
'message' => $message,
|
1771 |
* General test for any contact form
|
1772 |
*/
|
1773 |
function ct_contact_form_validate () {
|
1774 |
+
global $pagenow,$cleantalk_executed, $cleantalk_url_exclusions,$ct_options, $ct_data, $ct_checkjs_frm;
|
1775 |
|
1776 |
$ct_options = ct_get_options();
|
1777 |
$ct_data = ct_get_data();
|
1790 |
}
|
1791 |
//@header("CtExclusions: ".$ct_cnt);
|
1792 |
cleantalk_debug("CtExclusions", $ct_cnt);
|
1793 |
+
|
1794 |
if (@sizeof($_POST)==0 ||
|
1795 |
(isset($_POST['signup_username']) && isset($_POST['signup_email']) && isset($_POST['signup_password'])) ||
|
1796 |
(isset($pagenow) && $pagenow == 'wp-login.php') || // WordPress log in form
|
1812 |
isset($_COOKIE[LOGGED_IN_COOKIE]) ||
|
1813 |
isset($_POST['fscf_submitted']) ||
|
1814 |
strpos($_SERVER['REQUEST_URI'],'/wc-api/')!==false ||
|
1815 |
+
isset($_POST['log']) && isset($_POST['pwd']) && isset($_POST['wp-submit']) ||
|
1816 |
+
isset($_POST[$ct_checkjs_frm]) && (@intval($ct_options['contact_forms_test']) == 1) // Formidable forms
|
1817 |
) {
|
1818 |
return null;
|
1819 |
}
|
inc/cleantalk-stats.js
DELETED
@@ -1,20 +0,0 @@
|
|
1 |
-
function ct_update_stats()
|
2 |
-
{
|
3 |
-
var data = {
|
4 |
-
'action': 'ajax_get_stats',
|
5 |
-
'security': ajax_nonce
|
6 |
-
};
|
7 |
-
jQuery.ajax({
|
8 |
-
type: "POST",
|
9 |
-
url: ajaxurl,
|
10 |
-
data: data,
|
11 |
-
dataType: 'json',
|
12 |
-
success: function(msg){
|
13 |
-
jQuery('#ct_stats').html('<span>' + msg.stat_accepted + '</span> / <span>' + msg.stat_blocked + '</span>');
|
14 |
-
setTimeout(ct_update_stats,60000);
|
15 |
-
}
|
16 |
-
});
|
17 |
-
}
|
18 |
-
jQuery(document).ready(function(){
|
19 |
-
ct_update_stats();
|
20 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/cleantalk-users-checkspam.js
CHANGED
@@ -114,10 +114,7 @@ function ct_insert_users()
|
|
114 |
url: ajaxurl,
|
115 |
data: data,
|
116 |
success: function(msg){
|
117 |
-
|
118 |
-
{
|
119 |
-
alert('Added 500 users');
|
120 |
-
}
|
121 |
}
|
122 |
});
|
123 |
}
|
@@ -136,13 +133,20 @@ function ct_delete_all_users()
|
|
136 |
if(msg>0)
|
137 |
{
|
138 |
jQuery('#cleantalk_users_left').html(msg);
|
139 |
-
|
140 |
}
|
141 |
else
|
142 |
{
|
143 |
location.href='users.php?page=ct_check_users';
|
144 |
}
|
145 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
});
|
147 |
}
|
148 |
function ct_delete_checked_users()
|
@@ -192,7 +196,8 @@ jQuery(".cleantalk_delete_user_button").click(function(){
|
|
192 |
jQuery("#comment-"+id).hide();
|
193 |
jQuery("#comment-"+id).remove();
|
194 |
close_animate=true;
|
195 |
-
}
|
|
|
196 |
});
|
197 |
});
|
198 |
jQuery(".cleantalk_delete_user_button").click(function(){
|
@@ -208,7 +213,8 @@ jQuery("#ct_check_users_button").click(function(){
|
|
208 |
ct_clear_users();
|
209 |
});
|
210 |
jQuery("#ct_check_users_button").click(function(){
|
211 |
-
|
|
|
212 |
jQuery('#ct_check_users_table').hide();
|
213 |
jQuery('#ct_delete_all_users').hide();
|
214 |
jQuery('#ct_delete_checked_users').hide();
|
@@ -219,13 +225,34 @@ jQuery("#ct_check_users_button").click(function(){
|
|
219 |
jQuery("#ct_insert_users").click(function(){
|
220 |
ct_insert_users();
|
221 |
});
|
|
|
|
|
|
|
|
|
222 |
jQuery("#ct_delete_all_users").click(function(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
jQuery('#ct_check_users_table').hide();
|
|
|
|
|
224 |
jQuery('#ct_deleting_message').show();
|
|
|
|
|
225 |
jQuery("html, body").animate({ scrollTop: 0 }, "slow");
|
226 |
ct_delete_all_users();
|
227 |
});
|
228 |
jQuery("#ct_delete_checked_users").click(function(){
|
|
|
|
|
|
|
|
|
229 |
ct_delete_checked_users();
|
230 |
});
|
231 |
jQuery(".cleantalk_user").mouseover(function(){
|
114 |
url: ajaxurl,
|
115 |
data: data,
|
116 |
success: function(msg){
|
117 |
+
alert('Inserted ' + msg + ' users.');
|
|
|
|
|
|
|
118 |
}
|
119 |
});
|
120 |
}
|
133 |
if(msg>0)
|
134 |
{
|
135 |
jQuery('#cleantalk_users_left').html(msg);
|
136 |
+
ct_delete_all_users();
|
137 |
}
|
138 |
else
|
139 |
{
|
140 |
location.href='users.php?page=ct_check_users';
|
141 |
}
|
142 |
+
},
|
143 |
+
error: function(jqXHR, textStatus, errorThrown) {
|
144 |
+
if(textStatus === 'timeout') {
|
145 |
+
alert('Failed from timeout. Going to run a new attempt to delete spam users.');
|
146 |
+
ct_delete_all_users();
|
147 |
+
}
|
148 |
+
},
|
149 |
+
timeout: 160000
|
150 |
});
|
151 |
}
|
152 |
function ct_delete_checked_users()
|
196 |
jQuery("#comment-"+id).hide();
|
197 |
jQuery("#comment-"+id).remove();
|
198 |
close_animate=true;
|
199 |
+
},
|
200 |
+
timeout: 15000
|
201 |
});
|
202 |
});
|
203 |
jQuery(".cleantalk_delete_user_button").click(function(){
|
213 |
ct_clear_users();
|
214 |
});
|
215 |
jQuery("#ct_check_users_button").click(function(){
|
216 |
+
|
217 |
+
// jQuery('#ct_checking_users_status').html('');
|
218 |
jQuery('#ct_check_users_table').hide();
|
219 |
jQuery('#ct_delete_all_users').hide();
|
220 |
jQuery('#ct_delete_checked_users').hide();
|
225 |
jQuery("#ct_insert_users").click(function(){
|
226 |
ct_insert_users();
|
227 |
});
|
228 |
+
|
229 |
+
jQuery("#ct_stop_deletion").click(function(){
|
230 |
+
window.location.reload();
|
231 |
+
});
|
232 |
jQuery("#ct_delete_all_users").click(function(){
|
233 |
+
if (!confirm('Delete all spam users?')) {
|
234 |
+
return false;
|
235 |
+
}
|
236 |
+
|
237 |
+
jQuery('#ct_checking_users_status').hide();
|
238 |
+
jQuery('#ct_check_users_table').hide();
|
239 |
+
jQuery('#ct_tools_buttons').hide();
|
240 |
+
jQuery('#ct_info_message').hide();
|
241 |
+
jQuery('#ct_ajax_info_users').hide();
|
242 |
jQuery('#ct_check_users_table').hide();
|
243 |
+
jQuery('#ct_check_users_button').hide();
|
244 |
+
jQuery('#ct_search_info').hide();
|
245 |
jQuery('#ct_deleting_message').show();
|
246 |
+
jQuery('#ct_preloader').show();
|
247 |
+
jQuery('#ct_stop_deletion').show();
|
248 |
jQuery("html, body").animate({ scrollTop: 0 }, "slow");
|
249 |
ct_delete_all_users();
|
250 |
});
|
251 |
jQuery("#ct_delete_checked_users").click(function(){
|
252 |
+
if (!confirm('Delete selected users?')) {
|
253 |
+
return false;
|
254 |
+
}
|
255 |
+
|
256 |
ct_delete_checked_users();
|
257 |
});
|
258 |
jQuery(".cleantalk_user").mouseover(function(){
|
inc/cleantalk-users.php
CHANGED
@@ -34,11 +34,10 @@ function ct_show_users_page()
|
|
34 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_marked_as_spam';", ARRAY_A);
|
35 |
$cnt_spam1=$r[0]['cnt'];
|
36 |
?>
|
37 |
-
<div id="ct_working_message" style="margin:auto;padding:3px;width:70%;border:2px dotted gray;display:none;background:#ffff99;">
|
38 |
-
<?php _e("Please wait for a while. CleanTalk is checking all users via blacklist database at cleantalk.org. You will have option to delete found spam users after plugin finish.", 'cleantalk'); ?>
|
39 |
-
</div>
|
40 |
<div id="ct_deleting_message" style="display:none">
|
41 |
-
<?php _e("Please wait for a while. CleanTalk is deleting spam users. Users left: ", 'cleantalk'); ?> <span id="cleantalk_users_left"
|
|
|
|
|
42 |
</div>
|
43 |
<div id="ct_done_message" <?php if($cnt_unchecked>0) print 'style="display:none"'; ?>>
|
44 |
<?php //_e("Done. All comments tested via blacklists database, please see result bellow.", 'cleantalk');
|
@@ -46,6 +45,9 @@ $cnt_spam1=$r[0]['cnt'];
|
|
46 |
</div>
|
47 |
<h3 id="ct_checking_users_status" style="text-align:center;width:90%;"></h3>
|
48 |
<div style="text-align:center;width:100%;display:none;" id="ct_preloader"><img border=0 src="<?php print plugin_dir_url(__FILE__); ?>images/preloader.gif" /></div>
|
|
|
|
|
|
|
49 |
<?php
|
50 |
$page=1;
|
51 |
if(isset($_GET['spam_page']))
|
@@ -167,31 +169,49 @@ $cnt_spam1=$r[0]['cnt'];
|
|
167 |
?>
|
168 |
</tbody>
|
169 |
</table>
|
|
|
170 |
<button class="button" id="ct_delete_all_users"><?php _e('Delete all users from list'); ?></button>
|
171 |
<button class="button" id="ct_delete_checked_users"><?php _e('Delete selected', 'cleantalk'); ?></button>
|
172 |
<?php
|
173 |
}
|
174 |
if($_SERVER['REMOTE_ADDR']=='127.0.0.1')print '<button class="button" id="ct_insert_users">Insert accounts</button><br />';
|
175 |
?>
|
|
|
176 |
<br /><br />
|
177 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
<?php
|
179 |
if($cnt_spam1>0)
|
180 |
{
|
181 |
-
print "
|
182 |
-
|
|
|
|
|
|
|
183 |
}
|
184 |
?>
|
185 |
-
<button class="button" id="ct_check_users_button"><?php _e("Check for spam again", 'cleantalk'); ?></button><br /><br />
|
186 |
|
187 |
</div>
|
188 |
-
|
|
|
|
|
|
|
189 |
<?php
|
190 |
}
|
191 |
|
192 |
add_action('admin_print_footer_scripts','ct_add_users_button');
|
193 |
function ct_add_users_button()
|
194 |
{
|
|
|
|
|
195 |
$screen = get_current_screen();
|
196 |
$ajax_nonce = wp_create_nonce( "ct_secret_nonce" );
|
197 |
?>
|
@@ -202,13 +222,13 @@ function ct_add_users_button()
|
|
202 |
<?php
|
203 |
if( $screen->id == 'users' ){
|
204 |
?>
|
205 |
-
<script src="<?php print plugins_url( 'cleantalk-users-editscreen.js', __FILE__ ); ?>"></script>
|
206 |
<?php
|
207 |
}
|
208 |
if($screen->id == 'users_page_ct_check_users')
|
209 |
{
|
210 |
?>
|
211 |
-
<script src="<?php print plugins_url( 'cleantalk-users-checkspam.js', __FILE__ ); ?>"></script>
|
212 |
<?php
|
213 |
}
|
214 |
}
|
@@ -218,9 +238,15 @@ add_action( 'wp_ajax_ajax_check_users', 'ct_ajax_check_users' );
|
|
218 |
|
219 |
function ct_ajax_check_users()
|
220 |
{
|
221 |
-
check_ajax_referer('ct_secret_nonce', 'security');
|
222 |
global $ct_options;
|
|
|
|
|
|
|
223 |
$ct_options = ct_get_options();
|
|
|
|
|
|
|
|
|
224 |
|
225 |
$args_unchecked = array(
|
226 |
'meta_query' => array(
|
@@ -230,11 +256,11 @@ function ct_ajax_check_users()
|
|
230 |
'compare' => 'NOT EXISTS'
|
231 |
),
|
232 |
),
|
233 |
-
'number'=>
|
234 |
);
|
235 |
|
236 |
$u=get_users($args_unchecked);
|
237 |
-
|
238 |
if(sizeof($u)>0)
|
239 |
{
|
240 |
$data=Array();
|
@@ -245,14 +271,13 @@ function ct_ajax_check_users()
|
|
245 |
{
|
246 |
$user_meta=array_values($user_meta);
|
247 |
}
|
248 |
-
if(
|
249 |
{
|
250 |
$data[]=$user_meta[0]['ip'];
|
251 |
-
|
252 |
-
else
|
253 |
-
|
254 |
-
|
255 |
-
}
|
256 |
$data[]=$u[$i]->data->user_email;
|
257 |
}
|
258 |
$data=implode(',',$data);
|
@@ -272,6 +297,7 @@ function ct_ajax_check_users()
|
|
272 |
$ct_options['apikey']
|
273 |
);
|
274 |
$result = file_get_contents($url, 0, $context);
|
|
|
275 |
$result=json_decode($result);
|
276 |
if(isset($result->error_message))
|
277 |
{
|
@@ -282,22 +308,25 @@ function ct_ajax_check_users()
|
|
282 |
for($i=0;$i<sizeof($u);$i++)
|
283 |
{
|
284 |
update_user_meta($u[$i]->ID,'ct_checked',date("Y-m-d H:m:s"),true);
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
|
|
|
|
|
|
301 |
{
|
302 |
update_user_meta($u[$i]->ID,'ct_marked_as_spam','1',true);
|
303 |
}
|
@@ -317,7 +346,7 @@ add_action( 'wp_ajax_ajax_info_users', 'ct_ajax_info_users' );
|
|
317 |
function ct_ajax_info_users()
|
318 |
{
|
319 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
320 |
-
global $wpdb;
|
321 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_checked' or $wpdb->usermeta.meta_key='ct_hash';");
|
322 |
$cnt_checked=$r[0]->cnt;
|
323 |
$r=$wpdb->get_results("select count(ID) as cnt from $wpdb->users;");
|
@@ -328,7 +357,13 @@ global $wpdb;
|
|
328 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_marked_as_spam';", ARRAY_A);
|
329 |
$cnt_spam1=$r[0]['cnt'];
|
330 |
|
331 |
-
printf (__("Total users %s, checked %s, found %s spam users
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
die();
|
333 |
}
|
334 |
|
@@ -336,28 +371,30 @@ add_action( 'wp_ajax_ajax_insert_users', 'ct_ajax_insert_users' );
|
|
336 |
function ct_ajax_insert_users()
|
337 |
{
|
338 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
339 |
-
|
340 |
-
|
341 |
-
|
|
|
342 |
{
|
343 |
-
$rnd=mt_rand(1,
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
}
|
360 |
-
|
|
|
361 |
die();
|
362 |
}
|
363 |
|
@@ -377,7 +414,7 @@ function ct_ajax_delete_all_users()
|
|
377 |
{
|
378 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
379 |
$args_spam = array(
|
380 |
-
'number'=>100,
|
381 |
'meta_query' => array(
|
382 |
Array(
|
383 |
'key' => 'ct_marked_as_spam',
|
@@ -389,20 +426,19 @@ function ct_ajax_delete_all_users()
|
|
389 |
$c_spam=get_users($args_spam);
|
390 |
$cnt=sizeof($c_spam);
|
391 |
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
for($i=0;$i<sizeof($c_spam);$i++)
|
403 |
{
|
404 |
wp_delete_user($c_spam[$i]->ID);
|
405 |
-
usleep(
|
406 |
}
|
407 |
print $cnt_all;
|
408 |
die();
|
34 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_marked_as_spam';", ARRAY_A);
|
35 |
$cnt_spam1=$r[0]['cnt'];
|
36 |
?>
|
|
|
|
|
|
|
37 |
<div id="ct_deleting_message" style="display:none">
|
38 |
+
<?php _e("Please wait for a while. CleanTalk is deleting spam users. Users left: ", 'cleantalk'); ?> <span id="cleantalk_users_left">
|
39 |
+
<?php echo $cnt_spam1;?>
|
40 |
+
</span>
|
41 |
</div>
|
42 |
<div id="ct_done_message" <?php if($cnt_unchecked>0) print 'style="display:none"'; ?>>
|
43 |
<?php //_e("Done. All comments tested via blacklists database, please see result bellow.", 'cleantalk');
|
45 |
</div>
|
46 |
<h3 id="ct_checking_users_status" style="text-align:center;width:90%;"></h3>
|
47 |
<div style="text-align:center;width:100%;display:none;" id="ct_preloader"><img border=0 src="<?php print plugin_dir_url(__FILE__); ?>images/preloader.gif" /></div>
|
48 |
+
<div id="ct_working_message" style="margin:auto;padding:3px;width:70%;border:2px dotted gray;display:none;background:#ffff99;margin-top: 1em;">
|
49 |
+
<?php _e("Please wait for a while. CleanTalk is checking all users via blacklist database at cleantalk.org. You will have option to delete found spam users after plugin finish.", 'cleantalk'); ?>
|
50 |
+
</div>
|
51 |
<?php
|
52 |
$page=1;
|
53 |
if(isset($_GET['spam_page']))
|
169 |
?>
|
170 |
</tbody>
|
171 |
</table>
|
172 |
+
<div id="ct_tools_buttons">
|
173 |
<button class="button" id="ct_delete_all_users"><?php _e('Delete all users from list'); ?></button>
|
174 |
<button class="button" id="ct_delete_checked_users"><?php _e('Delete selected', 'cleantalk'); ?></button>
|
175 |
<?php
|
176 |
}
|
177 |
if($_SERVER['REMOTE_ADDR']=='127.0.0.1')print '<button class="button" id="ct_insert_users">Insert accounts</button><br />';
|
178 |
?>
|
179 |
+
</div>
|
180 |
<br /><br />
|
181 |
+
<table>
|
182 |
+
<tr>
|
183 |
+
<td>
|
184 |
+
<button class="button" id="ct_check_users_button"><?php _e("Check for spam again", 'cleantalk'); ?></button>
|
185 |
+
</td>
|
186 |
+
<td style="padding-left: 2em;">
|
187 |
+
<div id="ct_info_message" class="wrap"><?php _e("The plugin will check all users against blacklists database and show you senders that have spam activity on other websites. Just click 'Find spam users' to start.", 'cleantalk'); ?>
|
188 |
+
</td>
|
189 |
+
</tr>
|
190 |
+
</table>
|
191 |
<?php
|
192 |
if($cnt_spam1>0)
|
193 |
{
|
194 |
+
print "
|
195 |
+
<div id=\"ct_search_info\">
|
196 |
+
<br />
|
197 |
+
There is some differencies between blacklists database and our API mechanisms. Blacklists shows all history of spam activity, but our API (that used in spam checking) used another parameters, too: last day of activity, number of spam attacks during last days etc. This mechanisms help us to reduce number of false positivitie. So, there is nothing strange, if some emails/IPs will be not found by this checking.
|
198 |
+
</div>";
|
199 |
}
|
200 |
?>
|
|
|
201 |
|
202 |
</div>
|
203 |
+
|
204 |
+
<div>
|
205 |
+
<button class="button" id="ct_stop_deletion" style="display:none;"><?php _e("Stop deletion", 'cleantalk'); ?></button>
|
206 |
+
</div>
|
207 |
<?php
|
208 |
}
|
209 |
|
210 |
add_action('admin_print_footer_scripts','ct_add_users_button');
|
211 |
function ct_add_users_button()
|
212 |
{
|
213 |
+
global $cleantalk_plugin_version;
|
214 |
+
|
215 |
$screen = get_current_screen();
|
216 |
$ajax_nonce = wp_create_nonce( "ct_secret_nonce" );
|
217 |
?>
|
222 |
<?php
|
223 |
if( $screen->id == 'users' ){
|
224 |
?>
|
225 |
+
<script src="<?php print plugins_url( 'cleantalk-users-editscreen.js?v=' . $cleantalk_plugin_version, __FILE__ ); ?>"></script>
|
226 |
<?php
|
227 |
}
|
228 |
if($screen->id == 'users_page_ct_check_users')
|
229 |
{
|
230 |
?>
|
231 |
+
<script src="<?php print plugins_url( 'cleantalk-users-checkspam.js?v=' . $cleantalk_plugin_version, __FILE__ ); ?>"></script>
|
232 |
<?php
|
233 |
}
|
234 |
}
|
238 |
|
239 |
function ct_ajax_check_users()
|
240 |
{
|
|
|
241 |
global $ct_options;
|
242 |
+
|
243 |
+
check_ajax_referer('ct_secret_nonce', 'security');
|
244 |
+
|
245 |
$ct_options = ct_get_options();
|
246 |
+
|
247 |
+
$skip_roles = array(
|
248 |
+
'administrator'
|
249 |
+
);
|
250 |
|
251 |
$args_unchecked = array(
|
252 |
'meta_query' => array(
|
256 |
'compare' => 'NOT EXISTS'
|
257 |
),
|
258 |
),
|
259 |
+
'number' => 100
|
260 |
);
|
261 |
|
262 |
$u=get_users($args_unchecked);
|
263 |
+
|
264 |
if(sizeof($u)>0)
|
265 |
{
|
266 |
$data=Array();
|
271 |
{
|
272 |
$user_meta=array_values($user_meta);
|
273 |
}
|
274 |
+
if(isset($user_meta[0]['ip']))
|
275 |
{
|
276 |
$data[]=$user_meta[0]['ip'];
|
277 |
+
$u[$i]->data->user_ip = $user_meta[0]['ip'];
|
278 |
+
} else {
|
279 |
+
$u[$i]->data->user_ip = null;
|
280 |
+
}
|
|
|
281 |
$data[]=$u[$i]->data->user_email;
|
282 |
}
|
283 |
$data=implode(',',$data);
|
297 |
$ct_options['apikey']
|
298 |
);
|
299 |
$result = file_get_contents($url, 0, $context);
|
300 |
+
|
301 |
$result=json_decode($result);
|
302 |
if(isset($result->error_message))
|
303 |
{
|
308 |
for($i=0;$i<sizeof($u);$i++)
|
309 |
{
|
310 |
update_user_meta($u[$i]->ID,'ct_checked',date("Y-m-d H:m:s"),true);
|
311 |
+
//
|
312 |
+
// Do not display forbidden roles.
|
313 |
+
//
|
314 |
+
$skip_user = false;
|
315 |
+
foreach ($skip_roles as $role) {
|
316 |
+
if (!$skip_user && in_array($role, $u[$i]->roles)) {
|
317 |
+
delete_user_meta($u[$i]->ID, 'ct_marked_as_spam');
|
318 |
+
$skip_user = true;
|
319 |
+
continue;
|
320 |
+
}
|
321 |
+
}
|
322 |
+
if ($skip_user) {
|
323 |
+
continue;
|
324 |
+
}
|
325 |
+
|
326 |
+
$uip = $u[$i]->data->user_ip;
|
327 |
+
$uim = $u[$i]->data->user_email;
|
328 |
+
|
329 |
+
if((isset($result->data->$uip) && $result->data->$uip->appears==1) || (isset($result->data->$uim) && $result->data->$uim->appears==1))
|
330 |
{
|
331 |
update_user_meta($u[$i]->ID,'ct_marked_as_spam','1',true);
|
332 |
}
|
346 |
function ct_ajax_info_users()
|
347 |
{
|
348 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
349 |
+
global $wpdb;
|
350 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_checked' or $wpdb->usermeta.meta_key='ct_hash';");
|
351 |
$cnt_checked=$r[0]->cnt;
|
352 |
$r=$wpdb->get_results("select count(ID) as cnt from $wpdb->users;");
|
357 |
$r=$wpdb->get_results("select distinct count($wpdb->users.ID) as cnt from $wpdb->users inner join $wpdb->usermeta on $wpdb->users.ID=$wpdb->usermeta.user_id where $wpdb->usermeta.meta_key='ct_marked_as_spam';", ARRAY_A);
|
358 |
$cnt_spam1=$r[0]['cnt'];
|
359 |
|
360 |
+
printf (__("Total users %s, checked %s, found %s spam users", 'cleantalk'), $cnt, $cnt_checked, $cnt_spam1);
|
361 |
+
$backup_notice = ' ';
|
362 |
+
if ($cnt_spam1 > 0) {
|
363 |
+
$backup_notice = __("Please do backup of WordPress database before delete any accounts!", 'cleantalk');
|
364 |
+
}
|
365 |
+
print "<p>$backup_notice</p>";
|
366 |
+
|
367 |
die();
|
368 |
}
|
369 |
|
371 |
function ct_ajax_insert_users()
|
372 |
{
|
373 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
374 |
+
|
375 |
+
$inserted = 0;
|
376 |
+
$use_id = 0;
|
377 |
+
for($i=0; $i<5000 ;$i++)
|
378 |
{
|
379 |
+
$rnd=mt_rand(1,10000000);
|
380 |
+
|
381 |
+
$user_name = "user_$rnd";
|
382 |
+
$email="stop_email_$rnd@example.com";
|
383 |
+
|
384 |
+
$user_id = wp_create_user(
|
385 |
+
$user_name,
|
386 |
+
$email,
|
387 |
+
rand()
|
388 |
+
);
|
389 |
+
|
390 |
+
if (is_int($user_id)) {
|
391 |
+
$inserted++;
|
392 |
+
} else {
|
393 |
+
error_log(print_r($user_id, true));
|
394 |
+
}
|
395 |
}
|
396 |
+
|
397 |
+
print "$inserted";
|
398 |
die();
|
399 |
}
|
400 |
|
414 |
{
|
415 |
check_ajax_referer( 'ct_secret_nonce', 'security' );
|
416 |
$args_spam = array(
|
417 |
+
'number' => 100,
|
418 |
'meta_query' => array(
|
419 |
Array(
|
420 |
'key' => 'ct_marked_as_spam',
|
426 |
$c_spam=get_users($args_spam);
|
427 |
$cnt=sizeof($c_spam);
|
428 |
|
429 |
+
$args = array(
|
430 |
+
'meta_key' => 'ct_marked_as_spam',
|
431 |
+
'meta_value' => '1',
|
432 |
+
'meta_comparecompare' => 'NUMERIC'
|
433 |
+
);
|
434 |
+
|
435 |
+
$user_query = new WP_User_Query( $args );
|
436 |
+
$cnt_all = $user_query->get_total();
|
437 |
+
|
438 |
+
for($i=0;$i<sizeof($c_spam);$i++)
|
|
|
439 |
{
|
440 |
wp_delete_user($c_spam[$i]->ID);
|
441 |
+
usleep(5000);
|
442 |
}
|
443 |
print $cnt_all;
|
444 |
die();
|
readme.txt
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
=== Spam Protection by CleanTalk ===
|
2 |
-
Contributors: znaeff, shagimuratov
|
3 |
-
Tags: spam, anti-spam, antispam, anti spam, bbpress, buddypress, captcha, capcha, captha, catcha, cf7 spam, comments, contact form spam, signup, 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, google 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, comment moderation, spam bots, block spam, signup spam, spam blocker, spam filter, user registration spam,pingback,trackback, anti-spam plugin, varnish, amp, spam free
|
4 |
Requires at least: 3.0
|
5 |
Tested up to: 4.5.2
|
6 |
-
Stable tag: 5.
|
7 |
License: GPLv2
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
10 |
-
|
11 |
|
12 |
== Description ==
|
13 |
No CAPTCHA, no questions, no animal counting, no puzzles, no math and no spam bots. Formerly 'Anti-Spam by CleanTalk'.
|
14 |
|
15 |
-
=
|
16 |
1. Stops spam comments.
|
17 |
1. Stops spam registrations.
|
18 |
1. Stops spam contact emails.
|
@@ -20,62 +20,62 @@ No CAPTCHA, no questions, no animal counting, no puzzles, no math and no spam bo
|
|
20 |
1. Stops spam bookings.
|
21 |
1. Stops spam subscriptions.
|
22 |
1. Stops spam in widgets.
|
23 |
-
1.
|
24 |
|
25 |
= Public reviews =
|
26 |
> Using CleanTalk on WPLift was a great test as we receive huge amounts of spam.
|
27 |
> *Oliver Dale, <a href="http://wplift.com/wordpress-anti-spam-plugin" target="_blank">WPLift.com</a>.*
|
28 |
|
29 |
-
=
|
30 |
-
Supports native WordPress, JetPack comments and any other
|
31 |
|
32 |
-
= Spam
|
33 |
-
Filters spam bots on registration forms WordPress, BuddyPress, bbPress, S2Member, WooCommerce, Profile builder and any other
|
34 |
|
35 |
-
= Protection
|
36 |
-
|
37 |
|
38 |
= WooCommerce spam filter =
|
39 |
-
Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce.
|
40 |
|
41 |
= Newsletters filter =
|
42 |
-
Anti-spam by CleanTalk filters spam subscriptions for MailPoet, MailChimp, PopupAlly and many other
|
43 |
|
44 |
-
= Spam filter for
|
45 |
-
|
46 |
|
47 |
= bbPress spam filter =
|
48 |
Protects everything about bbPress: registrations, topics, replies.
|
49 |
|
50 |
= Other spam filters =
|
51 |
* WordPress Landing Pages.
|
52 |
-
* WP User Frontend.
|
53 |
-
* Any WordPress form (
|
54 |
-
* Any submission to site (
|
55 |
|
56 |
= Compatible with WordPress cache plugins =
|
57 |
* W3 Total Cache, Quick Cache, WP Fastest Cache, Hyper Cache, WP Super cache and any other cache plugins.
|
58 |
|
59 |
-
= Check existing comments for spam. Bulk
|
60 |
-
With the help of anti-spam by CleanTalk you
|
61 |
|
62 |
-
= Check existing users for spam. Bulk
|
63 |
-
With the help of anti-spam by CleanTalk you
|
64 |
|
65 |
= Blocking users by country =
|
66 |
-
Automatically block comments and
|
67 |
|
68 |
= Blocking comments by "stop words" =
|
69 |
-
You can block comments
|
70 |
|
71 |
-
= Private
|
72 |
-
Automatically block comments and registrations from your private black IP/email address list. This option helps to strengthen the protection
|
73 |
|
74 |
-
= Private
|
75 |
-
It allows you to add individual IP addresses and subnets to
|
76 |
|
77 |
= Low false/positive rate =
|
78 |
-
This plugin uses multiple anti-spam tests to filter spam bots
|
79 |
|
80 |
= How CleanTalk improves SEO for your website? =
|
81 |
So, you already know that the speed of the site has a direct impact on SEO.
|
@@ -110,45 +110,45 @@ CleanTalk Anti-Spam is the second step and checks all other requests on the webs
|
|
110 |
|
111 |
= How SpamFireWall works? =
|
112 |
* The visitor enters to your web site.
|
113 |
-
* HTTP request data
|
114 |
-
* If it is an active spam bot, the bot gets a blank page, if it is a visitor then
|
115 |
|
116 |
All the CleanTalk SpamFireWall activity is being logged in the process of filtering.
|
117 |
|
118 |
-
= SpamFireWall DDoS Protection
|
119 |
-
SpamFireWall can mitigate HTTP/HTTPS DDoS attacks. When an intruder makes GET requests to attack your website, SpamFireWall blocks all requests from bad IP addresses. Your website gives the intruder a special page with description of DDoS rejection instead of the website pages. Therefore SpamFireWall
|
120 |
|
121 |
= XML-RPC brute force protection =
|
122 |
SpamFireWall can mitigate XML-RPC brute force attacks. It blocks XML-RPC attacks from bad IP addresses. This helps to prevent bruteforce attacks by a Remote Procedure Call.
|
123 |
|
124 |
-
= No spam comments, no spam registrations, no spam contact emails, no spam trackbacks. CAPTCHA-
|
125 |
-
Spam is one of the most irritating
|
126 |
|
127 |
= AntiSpam plugin info =
|
128 |
-
CleanTalk is an all-in-one anti-spam solution for WordPress that protects login,
|
129 |
|
130 |
-
CleanTalk is a transparent anti-spam tool, we provide detailed statistics of all
|
131 |
|
132 |
-
We have developed anti-spam for WordPress that
|
133 |
|
134 |
-
The anti-spam method offered by CleanTalk avoids
|
135 |
|
136 |
-
CleanTalk is a premium anti-spam service for WordPress
|
137 |
|
138 |
-
* Up to 99.998% protection
|
139 |
* Time and resources saving.
|
140 |
* More registrations/comments/visitors.
|
141 |
-
*
|
142 |
-
*
|
143 |
-
* Traffic
|
144 |
* 24/7 technical support.
|
145 |
* Clear statistics.
|
146 |
* No captcha (reCaptcha), puzzles, etc.
|
147 |
-
* Free mobile app to control anti-spam function
|
148 |
|
149 |
= Additional features =
|
150 |
-
*
|
151 |
-
* Apps for iPhone, Android to control anti-spam service, comments, signups, contacts,
|
152 |
* AntiSpam apps for most popular CMS on cleantalk.org.
|
153 |
|
154 |
= How to protect sites from spam bots without CAPTCHA? =
|
@@ -164,19 +164,19 @@ You do not have to work in IT to know what spam is. Besides piles of unwanted em
|
|
164 |
Spammers want to get backlinks from your site to improve their site's PageRank or redirect your visitors to malicious sites.This level of spam can damage your reputation with readers and commentators if you fail to tackle it. It is not uncommon for some WordPress websites to receive hundreds or even thousands of comments every week. However, by using a CleanTalk plugin, spam can be easily handled by your WordPress website.
|
165 |
|
166 |
= CleanTalk's features =
|
167 |
-
CleanTalk is one of the fastest plugins that allows you to lower the server load. One of the important parameters for each
|
168 |
|
169 |
-
CleanTalk has developed unique algorithms to assess
|
170 |
|
171 |
-
The registrations of visitors are checked in a similar manner. The service adds not
|
172 |
|
173 |
-
All-in-one. CleanTalk
|
174 |
|
175 |
-
Spam attacks log.
|
176 |
|
177 |
-
With the help of anti-spam by CleanTalk you can check existing comments and users, to find and quickly delete spam comments at once. This allows administrators of websites to automatically check and identify spam bots, comments and users, which were not detected by conventional anti-spam tools.
|
178 |
|
179 |
-
CleanTalk has an advanced option “SpamFireWall”. This option allows you to block the most active spam bots before they get access to your website. It
|
180 |
|
181 |
“CleanTalk team has been developing a cloud spam protection system for five years and has created a truly reliable anti-spam service designed for you to guarantee your safety”.
|
182 |
|
@@ -185,6 +185,7 @@ Audience engagement plugin <a href="http://wordpress.org/plugins/feedweb/">Feedw
|
|
185 |
|
186 |
> Max power, all-in-one, premium anti-spam WordPress plugin. No comments & registrations spam, no contact spam, protects any forms. Just install and forget spam.
|
187 |
|
|
|
188 |
== Installation ==
|
189 |
= Spam protection plugin setup =
|
190 |
1. Download, install and activate Anti-spam by CleanTalk.
|
@@ -466,6 +467,14 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
|
|
466 |
1. CleanTalk works faster than most of other anti-spam plugins.
|
467 |
|
468 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
= 5.41 2016-05-31 =
|
470 |
* Added HTTP response in plugin response if an network issue was happend.
|
471 |
* Optimized JavaScript anti-spam test for Formidable forms.
|
@@ -1058,6 +1067,14 @@ WordPress 3.0 at least. PHP 5 with CURL or file_get_contents() function and enab
|
|
1058 |
* First version
|
1059 |
|
1060 |
== Upgrade Notice ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1061 |
= 5.41 2016-05-31 =
|
1062 |
* Added HTTP response in plugin response if an network issue was happend.
|
1063 |
* Optimized JavaScript anti-spam test for Formidable forms.
|
1 |
=== Spam Protection by CleanTalk ===
|
2 |
+
Contributors: znaeff, shagimuratov, serge00
|
3 |
+
Tags: spam, anti-spam, antispam, anti spam, bbpress, buddypress, captcha, capcha, captha, catcha, cf7 spam, comments, contact form spam, signup, 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, google 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, comment moderation, spam bots, block spam, signup spam, spam blocker, spam filter, user registration spam,pingback,trackback, anti-spam plugin, varnish, amp, spam free, userpro
|
4 |
Requires at least: 3.0
|
5 |
Tested up to: 4.5.2
|
6 |
+
Stable tag: 5.42
|
7 |
License: GPLv2
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
10 |
+
Spam protection plug-in, all-in-one, premium anti-spam. No comments spam & registrations spam, no email spam, protects any forms. Forget spam.
|
11 |
|
12 |
== Description ==
|
13 |
No CAPTCHA, no questions, no animal counting, no puzzles, no math and no spam bots. Formerly 'Anti-Spam by CleanTalk'.
|
14 |
|
15 |
+
= Anti-Spam features =
|
16 |
1. Stops spam comments.
|
17 |
1. Stops spam registrations.
|
18 |
1. Stops spam contact emails.
|
20 |
1. Stops spam bookings.
|
21 |
1. Stops spam subscriptions.
|
22 |
1. Stops spam in widgets.
|
23 |
+
1. Checks the existing comments for spam.
|
24 |
|
25 |
= Public reviews =
|
26 |
> Using CleanTalk on WPLift was a great test as we receive huge amounts of spam.
|
27 |
> *Oliver Dale, <a href="http://wplift.com/wordpress-anti-spam-plugin" target="_blank">WPLift.com</a>.*
|
28 |
|
29 |
+
= Anti-Spam protection for comments =
|
30 |
+
Supports native WordPress, JetPack comments and any other comment plugins. The plugin moves spam comments to SPAM folder or you can set the option to ban spam comments silently. You can also enable the option in the plugin settings to auto-delete comments from SPAM folder.
|
31 |
|
32 |
+
= Spam bot registrations filter =
|
33 |
+
Filters spam bots on registration forms of WordPress, BuddyPress, bbPress, S2Member, WooCommerce, Profile builder and any other registration plugins.
|
34 |
|
35 |
+
= Protection from contact form spam =
|
36 |
+
The plugin is tested and ready to protect from spam emails via Formidable forms, Contact form 7, JetPack Contact form, Fast Secure Contact form, Ninja forms, Landing pages, Gravity forms and any other themes/custom contact forms.
|
37 |
|
38 |
= WooCommerce spam filter =
|
39 |
+
Anti-spam by CleanTalk filters spam registrations and spam reviews for WooCommerce. The plugin is fully compatible with WooCommerce 2.1 and higher.
|
40 |
|
41 |
= Newsletters filter =
|
42 |
+
Anti-spam by CleanTalk filters spam subscriptions for MailPoet, MailChimp, PopupAlly and many other newsletter plugins.
|
43 |
|
44 |
+
= Spam filter for theme contact forms =
|
45 |
+
The plugin blocks spam emails via any theme (built-in ones included) contact forms. The plugin filters spam emails silently (without any error notices on WordPress frontend) in AJAX forms as well.
|
46 |
|
47 |
= bbPress spam filter =
|
48 |
Protects everything about bbPress: registrations, topics, replies.
|
49 |
|
50 |
= Other spam filters =
|
51 |
* WordPress Landing Pages.
|
52 |
+
* WP User Frontend, UserPro.
|
53 |
+
* Any WordPress form (checkbox 'Custom contact forms').
|
54 |
+
* Any submission to the site (checkbox 'Check all POST data')
|
55 |
|
56 |
= Compatible with WordPress cache plugins =
|
57 |
* W3 Total Cache, Quick Cache, WP Fastest Cache, Hyper Cache, WP Super cache and any other cache plugins.
|
58 |
|
59 |
+
= Check existing comments for spam. Bulk comments removal =
|
60 |
+
With the help of anti-spam by CleanTalk you can inspect through existing comments to find and quickly delete spam comments at once. To use this function, go to WP Console —> Comments —> Find spam comments.
|
61 |
|
62 |
+
= Check existing users for spam. Bulk accounts removal =
|
63 |
+
With the help of anti-spam by CleanTalk you can inspect through existing accounts to find and quickly delete spam users at once. For use this function, go to WP Console —> Users —> Check for spam.
|
64 |
|
65 |
= Blocking users by country =
|
66 |
+
Automatically block comments and registrations from the countries you have set a ban for. This option is useful in cases of manual spam protection and for protection enhancement. If your site is not intended for international audience and you do not expect comments/users from other countries.
|
67 |
|
68 |
= Blocking comments by "stop words" =
|
69 |
+
You can block comments which contain "stop words" to enhance spam filtering and messages with obscene words blocking. You can add particular words or phrases.
|
70 |
|
71 |
+
= Private black lists for anti-spam service =
|
72 |
+
Automatically block comments and registrations from your private black IP/email address list. This option helps to strengthen the protection from a manual spam or block unwanted comments from users.
|
73 |
|
74 |
+
= Private black list for SpamFireWall =
|
75 |
+
It allows you to add individual IP addresses and subnets to SpamFireWall. It blocks the attacks from IP addresses which are not included in the SFW base yet. This option can help to block HTTP/HTTPS DDoS, SQL, brute force attacks and any others that made it through the HTTP/HTTPS.
|
76 |
|
77 |
= Low false/positive rate =
|
78 |
+
This plugin uses multiple anti-spam tests to filter spam bots having as low false/positive rate as possible. Multiple anti-spam tests help to avoid false/positive blocks of the real website visitors even if one of the tests failed.
|
79 |
|
80 |
= How CleanTalk improves SEO for your website? =
|
81 |
So, you already know that the speed of the site has a direct impact on SEO.
|
110 |
|
111 |
= How SpamFireWall works? =
|
112 |
* The visitor enters to your web site.
|
113 |
+
* HTTP request data are being checked in the nearly 5.8 million of the identified spam bot IPs.
|
114 |
+
* If it is an active spam bot, the bot gets a blank page, if it is a visitor then he receives a normal page. This process is completely transparent for the visitors.
|
115 |
|
116 |
All the CleanTalk SpamFireWall activity is being logged in the process of filtering.
|
117 |
|
118 |
+
= SpamFireWall DDoS Protection =
|
119 |
+
SpamFireWall can mitigate HTTP/HTTPS DDoS attacks. When an intruder makes GET requests to attack your website, SpamFireWall blocks all requests from bad IP addresses. Your website gives the intruder a special page with the description of DDoS rejection instead of the website pages. Therefore SpamFireWall helps to reduce CPU usage of your server.
|
120 |
|
121 |
= XML-RPC brute force protection =
|
122 |
SpamFireWall can mitigate XML-RPC brute force attacks. It blocks XML-RPC attacks from bad IP addresses. This helps to prevent bruteforce attacks by a Remote Procedure Call.
|
123 |
|
124 |
+
= No spam comments, no spam registrations, no spam contact emails, no spam trackbacks. CAPTCHA-free anti-spam for WordPress =
|
125 |
+
Spam is one of the most irritating things. Spam rates are increasing every year and conventional anti-spam can no longer handle all spam bots. CleanTalk prevents and automatically blocks spam. You'll be surprised how effective CleanTalk is in protecting from spam.
|
126 |
|
127 |
= AntiSpam plugin info =
|
128 |
+
CleanTalk is an all-in-one anti-spam solution for WordPress that protects login, comment, contact and WooCommerce forms at once. You don't need to install separate anti-spam plugins for each form. It allows your blog to work faster and save resources. After installation you will forget about spam; your CleanTalk plugin will do all the work. You won't have to deal with spam as CleanTalk does this for you automatically.
|
129 |
|
130 |
+
CleanTalk is a transparent anti-spam tool, we provide detailed statistics of all incoming comments and logins. You can always be sure that **there are no errors**. We have developed a mobile app for you to see anti-spam statistics wherever you want.
|
131 |
|
132 |
+
We have developed the anti-spam for WordPress that protects you from spam bots at the maximum level allowing you to provide your visitors a simple and convenient form of comments/registrations without annoying CAPTCHAs and puzzles. CleanTalk detects spam in multistage tests allowing us to block up to 99.998% of spam bots.
|
133 |
|
134 |
+
The anti-spam method offered by CleanTalk avoids inconvenient for communication methods (CAPTCHA, question-answer etc.), and offers to your site visitors a more comfortable one.
|
135 |
|
136 |
+
CleanTalk is a premium anti-spam service for WordPress, the plugin works with our own CleanTalk Cloud Service. CleanTalk offers a free trial, you can look at the <a href="https://cleantalk.org/price">pricing</a> here. We provide anti-spam services at the highest level. To maintain this level we cannot afford to offer a free version of our service, as this will immediately affect the quality of the providing anti-spam protection. Paying for a year of anti-spam service, you save a lot more and receive:
|
137 |
|
138 |
+
* Up to 99.998% protection from spam bots.
|
139 |
* Time and resources saving.
|
140 |
* More registrations/comments/visitors.
|
141 |
+
* Protection of the several websites at once in different CMS.
|
142 |
+
* Ease in installation and using.
|
143 |
+
* Traffic increase and loyalty to the users.
|
144 |
* 24/7 technical support.
|
145 |
* Clear statistics.
|
146 |
* No captcha (reCaptcha), puzzles, etc.
|
147 |
+
* Free mobile app to control anti-spam function on your website.
|
148 |
|
149 |
= Additional features =
|
150 |
+
* Daily and weekly detailed anti-spam reports: traffic VS spam.
|
151 |
+
* Apps for iPhone, Android to control anti-spam service, comments, signups, contacts, traffic and spam statistics for the last 7 days.
|
152 |
* AntiSpam apps for most popular CMS on cleantalk.org.
|
153 |
|
154 |
= How to protect sites from spam bots without CAPTCHA? =
|
164 |
Spammers want to get backlinks from your site to improve their site's PageRank or redirect your visitors to malicious sites.This level of spam can damage your reputation with readers and commentators if you fail to tackle it. It is not uncommon for some WordPress websites to receive hundreds or even thousands of comments every week. However, by using a CleanTalk plugin, spam can be easily handled by your WordPress website.
|
165 |
|
166 |
= CleanTalk's features =
|
167 |
+
CleanTalk is one of the fastest plugins that allows you to lower the server load. One of the important parameters for each webmaster is the speed of the site, so we make sure that our plugin consumes as few server resources as possible. The Cloud Service provides the advantage: all data processing takes place in the Cloud.
|
168 |
|
169 |
+
CleanTalk team has developed unique algorithms to assess visitors' behavior. CleanTalk analyzes user behavior and the parameters of the filled forms. Our anti-spam module, being installed in your website, sends the behavior parameters of either a visitor or a spam bot. When these parameters are estimated, the CleanTalk service makes a decision – to post a message or to define it as spam and reject it. Based on these checks, the service forms its own list of email addresses used by spam bots.
|
170 |
|
171 |
+
The registrations of visitors are being checked in a similar manner. The service adds to the blacklist not just email addresses, but also IP addresses and domains of websites that promote themselves through spam mailing. All of this happens automatically and requires no action from the administration of the website. In 2.5 million queries the service makes a mistake in 40-45 cases, i.e. CleanTalk detects spam with 99.9982% accuracy. We constantly monitor these errors and make adjustments to our algorithms. Even with this exceptional accuracy our team is aiming to improve the figures over time.
|
172 |
|
173 |
+
All-in-one. CleanTalk protects all forms instantaneously — comments, registrations, feedback, contacts. No need to install additional plugins for each form. You save resources and increase performance of your website.
|
174 |
|
175 |
+
Spam attacks log. The service CleanTalk records all filtered comments, registrations and other spam attacks in the “Log of spam attacks” and stores the data in the log for up to 45 days. Using the log, you can ensure reliable protection of your website from spam and experience no false/positive filtering.
|
176 |
|
177 |
+
With the help of anti-spam by CleanTalk you can check existing comments and users, to find and quickly delete spam comments at once. This allows administrators of websites to automatically check and identify spam bots, comments and users, which were not detected by conventional anti-spam tools. The existing comments and users checking process is performed in a database of the nearly 2 million identified spam bots. Detailed statistics allows CleanTalk customers to fully control it.
|
178 |
|
179 |
+
CleanTalk has an advanced option “SpamFireWall”. This option allows you to block the most active spam bots before they get access to your website. It unloads you website pages when an attempt attack was made, so your web server won't run unnecessary scripts on these pages. Also it prevents any scanning of website pages by spam bots. Subsequently SpamFireWall significantly reduces your webserver load. SpamFireWall can mitigate HTTP/HTTPS DDoS attacks. When an intruder makes GET requests to attack your website, SpamFireWall will block requests from bad IP addresses. Your website gives the intruder a special page with a description of DDoS rejection instead of the website pages. SpamFireWall can help to reduce the CPU usage of your server because of this reason.
|
180 |
|
181 |
“CleanTalk team has been developing a cloud spam protection system for five years and has created a truly reliable anti-spam service designed for you to guarantee your safety”.
|
182 |
|
185 |
|
186 |
> Max power, all-in-one, premium anti-spam WordPress plugin. No comments & registrations spam, no contact spam, protects any forms. Just install and forget spam.
|
187 |
|
188 |
+
|
189 |
== Installation ==
|
190 |
= Spam protection plugin setup =
|
191 |
1. Download, install and activate Anti-spam by CleanTalk.
|
467 |
1. CleanTalk works faster than most of other anti-spam plugins.
|
468 |
|
469 |
== Changelog ==
|
470 |
+
= 5.42 2016-06-15 =
|
471 |
+
* Added anti-spam protection for UserPro.
|
472 |
+
* Improved protection for Formidable forms + Varnish.
|
473 |
+
* Improved bulk search for spam accounts.
|
474 |
+
* Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
|
475 |
+
* Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
|
476 |
+
* Minor fixes in plugin backend.
|
477 |
+
|
478 |
= 5.41 2016-05-31 =
|
479 |
* Added HTTP response in plugin response if an network issue was happend.
|
480 |
* Optimized JavaScript anti-spam test for Formidable forms.
|
1067 |
* First version
|
1068 |
|
1069 |
== Upgrade Notice ==
|
1070 |
+
= 5.42 2016-06-15 =
|
1071 |
+
* Added anti-spam protection for UserPro.
|
1072 |
+
* Improved protection for Formidable forms + Varnish.
|
1073 |
+
* Improved bulk search for spam accounts.
|
1074 |
+
* Fixed spam protection for pages that contain multiple Formidable forms with same HTML ID.
|
1075 |
+
* Optimized PHP code to be compatible with PHP 5.4 and above. The patch has been applied to Formidable forms spam protection.
|
1076 |
+
* Minor fixes in plugin backend.
|
1077 |
+
|
1078 |
= 5.41 2016-05-31 =
|
1079 |
* Added HTTP response in plugin response if an network issue was happend.
|
1080 |
* Optimized JavaScript anti-spam test for Formidable forms.
|