Version Description
= 2.0 = IP IP
= 1.4 =
NG
= 1.3 =
= 1.2.1 =
= 1.2 = 1
= 1.1 =
= 1.0 =
Download this release
Release Info
Developer | tsato |
Plugin | Throws SPAM Away |
Version | 2.6.2 |
Comparing to | |
See all releases |
Code changes from version 2.6.1 to 2.6.2
- hostbyip.php +1 -1
- js/tsa_params.js +16 -10
- js/tsa_params.min.js +1 -0
- readme.txt +7 -2
- throws_spam_away.class.php +476 -426
- throws_spam_away.php +87 -35
hostbyip.php
CHANGED
@@ -16,7 +16,7 @@ $last_spam_comment_result = $newThrowsSpamAway->get_last_spam_comment($spam_ip);
|
|
16 |
$last_comment_date = $last_spam_comment_result->post_date;
|
17 |
$last_comment_post = get_permalink($last_spam_comment_result->post_id);
|
18 |
$last_comment_post_title = get_the_title(get_post($last_spam_comment_result->post_id));
|
19 |
-
$is_spam_champuru = ( $newThrowsSpamAway->
|
20 |
?><!DOCTYPE html>
|
21 |
<!--[if IE 8]>
|
22 |
<html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="ja" prefix="og: http://ogp.me/ns#" >
|
16 |
$last_comment_date = $last_spam_comment_result->post_date;
|
17 |
$last_comment_post = get_permalink($last_spam_comment_result->post_id);
|
18 |
$last_comment_post_title = get_the_title(get_post($last_spam_comment_result->post_id));
|
19 |
+
$is_spam_champuru = ( $newThrowsSpamAway->reject_spam_ip( $spam_ip ) ? FALSE : TRUE );
|
20 |
?><!DOCTYPE html>
|
21 |
<!--[if IE 8]>
|
22 |
<html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="ja" prefix="og: http://ogp.me/ns#" >
|
js/tsa_params.js
CHANGED
@@ -3,6 +3,9 @@
|
|
3 |
* WordPress's Plugin
|
4 |
* @author Takeshi Satoh@GTI Inc. 2014
|
5 |
* @since version2.6
|
|
|
|
|
|
|
6 |
*/
|
7 |
|
8 |
jQuery(function($){
|
@@ -10,18 +13,21 @@ jQuery(function($){
|
|
10 |
$('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3').val( $('.tsa_param_field_tsa_ input').val() ); // copy
|
11 |
|
12 |
var date = new Date();
|
13 |
-
var iso =
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
|
|
|
|
18 |
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
|
23 |
-
|
24 |
-
|
|
|
25 |
}
|
26 |
|
27 |
});
|
3 |
* WordPress's Plugin
|
4 |
* @author Takeshi Satoh@GTI Inc. 2014
|
5 |
* @since version2.6
|
6 |
+
*
|
7 |
+
* -- updated --
|
8 |
+
* 2014/05/10 debug for IE8
|
9 |
*/
|
10 |
|
11 |
jQuery(function($){
|
13 |
$('.tsa_param_field_tsa_2 input#tsa_param_field_tsa_3').val( $('.tsa_param_field_tsa_ input').val() ); // copy
|
14 |
|
15 |
var date = new Date();
|
16 |
+
var iso = null;
|
17 |
+
if ( typeof date.toISOString != 'undefined' ) {
|
18 |
+
iso = date.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);
|
19 |
+
current_date = iso[1] + ' ' + iso[2];
|
20 |
+
if ( $('#comments form input#tsa_param_field_tsa_3').length == 0 ) {
|
21 |
+
$('#comments form').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
|
22 |
+
}
|
23 |
|
24 |
+
if ( $('#respond form input#tsa_param_field_tsa_3').length == 0 ) {
|
25 |
+
$('#respond form').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
|
26 |
+
}
|
27 |
|
28 |
+
if ( $('form#commentform input#tsa_param_field_tsa_3').length == 0 ) {
|
29 |
+
$('form#commentform').append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />'); // add to comment form
|
30 |
+
}
|
31 |
}
|
32 |
|
33 |
});
|
js/tsa_params.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery(function(a){a(".tsa_param_field_tsa_2").hide();a(".tsa_param_field_tsa_2 input#tsa_param_field_tsa_3").val(a(".tsa_param_field_tsa_ input").val());var b=new Date();var c=null;if(typeof b.toISOString!="undefined"){c=b.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);current_date=c[1]+" "+c[2];if(a("#comments form input#tsa_param_field_tsa_3").length==0){a("#comments form").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}if(a("#respond form input#tsa_param_field_tsa_3").length==0){a("#respond form").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}if(a("form#commentform input#tsa_param_field_tsa_3").length==0){a("form#commentform").append('<input type="hidden" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" value="'+current_date+'" />')}}});
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: taman777
|
|
3 |
Donate link: http://gti.jp/tsa
|
4 |
Tags: comments, spam
|
5 |
Requires at least: 3.1
|
6 |
-
Tested up to: 3.
|
7 |
-
Stable tag: 2.6.
|
8 |
|
9 |
コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
|
10 |
|
@@ -46,6 +46,11 @@ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共
|
|
46 |
※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
|
47 |
[192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
|
48 |
|
|
|
|
|
|
|
|
|
|
|
49 |
・バージョン2.6.1
|
50 |
スパムデータベースの表示に時間がかかるため「設定」部分と「スパムデータ」表示画面の2メニュー構成に変更しました。
|
51 |
すぱむチャンプルーによる捕捉の場合にエラータイプが正しく表示されていない不具合を修正しました。
|
3 |
Donate link: http://gti.jp/tsa
|
4 |
Tags: comments, spam
|
5 |
Requires at least: 3.1
|
6 |
+
Tested up to: 3.9.1
|
7 |
+
Stable tag: 2.6.2
|
8 |
|
9 |
コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
|
10 |
|
46 |
※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
|
47 |
[192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
|
48 |
|
49 |
+
・バージョン2.6.2
|
50 |
+
スパム対策設定の初期値を長年の研究の末の「最適」であろう設定値にしました。
|
51 |
+
デフォルト値として項目の下に記載しています。長年ご利用の方は、参考に調整してください。
|
52 |
+
IE8にてJavaScriptエラーとなっていた箇所があり、「tsa_param.js」を修正いたしました。大変ご迷惑をお掛けいたしました。
|
53 |
+
|
54 |
・バージョン2.6.1
|
55 |
スパムデータベースの表示に時間がかかるため「設定」部分と「スパムデータ」表示画面の2メニュー構成に変更しました。
|
56 |
すぱむチャンプルーによる捕捉の場合にエラータイプが正しく表示されていない不具合を修正しました。
|
throws_spam_away.class.php
CHANGED
@@ -10,7 +10,7 @@ class ThrowsSpamAway {
|
|
10 |
|
11 |
// version
|
12 |
var $version = '2.6';
|
13 |
-
var $table_name =
|
14 |
|
15 |
public function __construct() {
|
16 |
global $default_spam_data_save;
|
@@ -24,12 +24,12 @@ class ThrowsSpamAway {
|
|
24 |
global $lower_spam_keep_day_count;
|
25 |
|
26 |
// 保存期間終了したデータ削除
|
27 |
-
$skdc = intval( get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count) );
|
28 |
if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
|
29 |
-
if ( get_option('tsa_spam_data_delete_flg',
|
30 |
-
// 期間 get_option('tsa_spam_keep_day_count') 日
|
31 |
$wpdb->query(
|
32 |
-
|
33 |
);
|
34 |
}
|
35 |
}
|
@@ -38,13 +38,13 @@ class ThrowsSpamAway {
|
|
38 |
* スパム投稿テーブル作成
|
39 |
* $flg がTRUEなら強制的にテーブル作成
|
40 |
*/
|
41 |
-
function
|
42 |
global $wpdb;
|
43 |
global $tsa_db_version;
|
44 |
|
45 |
// テーブル作成要フラグ
|
46 |
$flg = FALSE;
|
47 |
-
if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) {
|
48 |
// テーブルが存在しないため作成する
|
49 |
$flg = TRUE;
|
50 |
}
|
@@ -54,9 +54,9 @@ class ThrowsSpamAway {
|
|
54 |
//現在のDBバージョン取得
|
55 |
$installed_ver = get_option( 'tsa_meta_version', 0 );
|
56 |
// DBバージョンが低い または テーブルが存在しない場合は作成
|
57 |
-
if( $flg == TRUE || $installed_ver < $tsa_db_version ) {
|
58 |
// dbDeltaのおかげ様でCREATE文のみ
|
59 |
-
$sql = "CREATE TABLE
|
60 |
meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
61 |
post_id bigint(20) UNSIGNED DEFAULT '0' NOT NULL,
|
62 |
ip_address varchar(64),
|
@@ -82,13 +82,13 @@ class ThrowsSpamAway {
|
|
82 |
function save_post_meta( $post_id, $ip_address, $spam_contents ) {
|
83 |
global $default_spam_data_save;
|
84 |
|
85 |
-
if ( get_option('tsa_spam_data_save', $default_spam_data_save) !=
|
86 |
|
87 |
global $wpdb;
|
88 |
|
89 |
$error_type = $spam_contents['error_type'];
|
90 |
-
$author = strip_tags($spam_contents['author']);
|
91 |
-
$comment = strip_tags($spam_contents['comment']);
|
92 |
|
93 |
//保存するために配列にする
|
94 |
$set_arr = array(
|
@@ -96,7 +96,7 @@ class ThrowsSpamAway {
|
|
96 |
'ip_address' => $ip_address,
|
97 |
'error_type' => $error_type,
|
98 |
'author' => $author,
|
99 |
-
'comment' => $comment
|
100 |
);
|
101 |
|
102 |
//レコード新規追加
|
@@ -109,8 +109,8 @@ class ThrowsSpamAway {
|
|
109 |
function tsa_scripts_init() {
|
110 |
global $tsa_version;
|
111 |
// anti-spam の方法を参考に作成しました
|
112 |
-
if ( !is_admin() ) {
|
113 |
-
wp_enqueue_script( 'throws-spam-away-script', plugins_url( '/js/tsa_params.js', __FILE__ ), array( 'jquery' ), $tsa_version );
|
114 |
}
|
115 |
}
|
116 |
|
@@ -128,11 +128,11 @@ class ThrowsSpamAway {
|
|
128 |
function comment_form_dummy_param_field() {
|
129 |
global $default_dummy_param_field_flg;
|
130 |
// 空パラメータフィールド作成
|
131 |
-
$dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg);
|
132 |
-
if ( $dummy_param_field_flg ==
|
133 |
echo '<p class="tsa_param_field_tsa_" style="display:none;">email confirm<span class="required">*</span><input type="text" name="tsa_email_param_field___" id="tsa_email_param_field___" size="30" value="" />
|
134 |
</p>';
|
135 |
-
echo '<p class="tsa_param_field_tsa_2">post date<span class="required">*</span><input type="text" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" size="30" value="'.date('Y-m-d H:i:s').'" />
|
136 |
</p>';
|
137 |
}
|
138 |
return TRUE;
|
@@ -151,27 +151,27 @@ class ThrowsSpamAway {
|
|
151 |
global $error_type;
|
152 |
|
153 |
// ログインしている場合は通過させます。
|
154 |
-
if( $user_ID ) {
|
155 |
return $id;
|
156 |
}
|
157 |
// コメント(comment)及び名前(author)の中も検査
|
158 |
-
$author = $_POST[
|
159 |
-
$comment = $_POST[
|
160 |
|
161 |
// チェック対象IPアドレス
|
162 |
$ip = $_SERVER['REMOTE_ADDR'];
|
163 |
|
164 |
// ホワイトリスト優先通過
|
165 |
// IP制御 任意のIPアドレスをあればブロックする
|
166 |
-
$white_ip_addresses = get_option( 'tsa_white_ip_addresses',
|
167 |
-
if ( $white_ip_addresses != NULL && $white_ip_addresses !=
|
168 |
// 改行区切りの場合はカンマ区切りに文字列置換後リスト化
|
169 |
-
$white_ip_addresses = str_replace("\n",
|
170 |
-
$ip_list = mb_split(
|
171 |
foreach ( $ip_list as $_ip ) {
|
172 |
// 指定IPが範囲指定の場合 例:192.168.1.0/24
|
173 |
-
if ( strpos( $_ip,
|
174 |
-
if ( $this->
|
175 |
// 通過対象
|
176 |
return $id;
|
177 |
}
|
@@ -182,40 +182,40 @@ class ThrowsSpamAway {
|
|
182 |
}
|
183 |
}
|
184 |
// IP系の検査
|
185 |
-
if (
|
186 |
// アウト!
|
187 |
} else
|
188 |
// コメント検査
|
189 |
-
|
190 |
return $id;
|
191 |
}
|
192 |
-
$error_msg =
|
193 |
switch ( $error_type ) {
|
194 |
-
case
|
195 |
$error_msg = get_option( 'tsa_must_key_error_message', $default_must_key_error_msg );
|
196 |
break;
|
197 |
-
case
|
198 |
$error_msg = get_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg );
|
199 |
break;
|
200 |
-
case
|
201 |
$error_msg = get_option( 'tsa_block_ip_address_error_message', $default_block_ip_address_error_msg );
|
202 |
break;
|
203 |
-
case
|
204 |
$error_msg = get_option( 'tsa_url_count_over_error_message', $default_url_count_over_error_msg );
|
205 |
break;
|
206 |
-
case
|
207 |
$error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
|
208 |
break;
|
209 |
-
case
|
210 |
default :
|
211 |
$error_msg = get_option( 'tsa_error_message', $default_error_msg );
|
212 |
}
|
213 |
// 記録する場合はDB記録
|
214 |
-
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) ==
|
215 |
$spam_contents = array();
|
216 |
$spam_contents['error_type'] = $error_type;
|
217 |
-
$spam_contents['author'] = mb_strcut($author, 0, 255);
|
218 |
-
$spam_contents['comment'] = mb_strcut($comment, 0, 255);
|
219 |
|
220 |
$this->save_post_meta( $id, $ip, $spam_contents );
|
221 |
}
|
@@ -223,10 +223,10 @@ class ThrowsSpamAway {
|
|
223 |
$back_time = ( (int) get_option( 'tsa_back_second', $default_back_second ) ) * 1000;
|
224 |
// タイム値が0なら元画面へそのままリダイレクト
|
225 |
if ( $back_time == 0 ) {
|
226 |
-
header(
|
227 |
die;
|
228 |
} else {
|
229 |
-
wp_die( __($error_msg.
|
230 |
}
|
231 |
}
|
232 |
|
@@ -236,47 +236,48 @@ class ThrowsSpamAway {
|
|
236 |
*/
|
237 |
function ip_check( $target_ip ) {
|
238 |
global $wpdb; // WordPress DBアクセス
|
|
|
239 |
global $newThrowsSpamAway;
|
240 |
global $error_type;
|
241 |
// スパムフィルター利用あれば始めに通す
|
242 |
// 1.スパムちゃんぷるー
|
243 |
-
$spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg' );
|
244 |
-
if ( get_option( 'tsa_spam_champuru_flg',
|
245 |
-
return $this->
|
246 |
}
|
247 |
// 2.以降あれば追加
|
248 |
|
249 |
// IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
|
250 |
$ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
|
251 |
|
252 |
-
if ($ip_block_from_spam_chk_flg ===
|
253 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
254 |
$results = $wpdb->get_results( "SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC " );
|
255 |
foreach ( $results as $item ) {
|
256 |
if ( trim( $item->comment_author_IP ) == trim( $target_ip ) ) {
|
257 |
// ブロックしたいIP
|
258 |
-
$error_type =
|
259 |
return FALSE;
|
260 |
}
|
261 |
}
|
262 |
}
|
263 |
// IP制御 任意のIPアドレスをあればブロックする
|
264 |
-
$block_ip_addresses = get_option( 'tsa_block_ip_addresses',
|
265 |
-
if ( $block_ip_addresses != NULL && $block_ip_addresses !=
|
266 |
// 改行区切りの場合はカンマ区切りに文字列置換後リスト化
|
267 |
-
$block_ip_addresses = str_replace("\n",
|
268 |
-
$ip_list = mb_split(
|
269 |
foreach ( $ip_list as $ip ) {
|
270 |
// 指定IPが範囲指定の場合 例:192.168.1.0/24
|
271 |
-
if ( strpos( $ip,
|
272 |
-
if ( $this->
|
273 |
// ブロックしたいIP
|
274 |
-
$error_type =
|
275 |
return FALSE;
|
276 |
}
|
277 |
} elseif ( trim( $ip ) == trim( $target_ip ) ) {
|
278 |
// ブロックしたいIP
|
279 |
-
$error_type =
|
280 |
return FALSE;
|
281 |
} else {
|
282 |
// セーフIP
|
@@ -289,42 +290,42 @@ class ThrowsSpamAway {
|
|
289 |
/**
|
290 |
* スパムちゃんぷるー利用ブロック
|
291 |
*/
|
292 |
-
function
|
293 |
global $spam_champuru_host;
|
294 |
global $error_type;
|
295 |
|
296 |
-
$
|
297 |
-
$host
|
298 |
$pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
|
299 |
-
$check_IP = trim(preg_match($pattern, $ip) ? $ip : $_SERVER['REMOTE_ADDR']);
|
300 |
-
$spam
|
301 |
-
if (preg_match($pattern, $check_IP)) {
|
302 |
-
$host = implode('.',array_reverse(split('\.',$check_IP))) . '.' . $host;
|
303 |
-
if (function_exists('dns_get_record')) {
|
304 |
-
$check_recs = dns_get_record($host, DNS_A);
|
305 |
-
if (isset($check_recs[0]['ip'])) $spam = ($check_recs[0]['ip'] === $
|
306 |
-
unset($check_recs);
|
307 |
-
} elseif (function_exists('gethostbyname')) {
|
308 |
-
$checked = (gethostbyname($host) === $
|
309 |
-
} elseif (class_exists('Net_DNS_Resolver')) {
|
310 |
$resolver = new Net_DNS_Resolver();
|
311 |
-
$response = $resolver->query($host, 'A');
|
312 |
-
if ($response) {
|
313 |
-
foreach ($response->answer as $rr) {
|
314 |
-
if ($rr->type === 'A') {
|
315 |
-
$spam = ($rr->address === $
|
316 |
break;
|
317 |
}
|
318 |
}
|
319 |
}
|
320 |
-
unset($response);
|
321 |
-
unset($resolver);
|
322 |
-
} elseif (function_exists('checkdnsrr')) {
|
323 |
-
$spam = (checkdnsrr($host,
|
324 |
}
|
325 |
}
|
326 |
-
if ($spam) {
|
327 |
-
$error_type =
|
328 |
return FALSE;
|
329 |
}
|
330 |
return TRUE;
|
@@ -336,12 +337,12 @@ class ThrowsSpamAway {
|
|
336 |
* @param string $cidr
|
337 |
* @return boolean
|
338 |
*/
|
339 |
-
function
|
340 |
-
list($network, $mask_bit_len) = explode('/', $cidr);
|
341 |
-
if ( !is_nan($mask_bit_len) && $mask_bit_len <= 32) {
|
342 |
$host = 32 - $mask_bit_len;
|
343 |
$net = ip2long($network) >> $host << $host; // 11000000101010000000000000000000
|
344 |
-
$ip_net = ip2long($ip) >> $host << $host;
|
345 |
return $net === $ip_net;
|
346 |
} else {
|
347 |
// 形式が不正ならば無視するためFALSE
|
@@ -357,13 +358,14 @@ class ThrowsSpamAway {
|
|
357 |
function validation( $comment, $author ) {
|
358 |
global $newThrowsSpamAway;
|
359 |
global $error_type;
|
360 |
-
global $
|
361 |
-
global $
|
362 |
-
global $
|
|
|
363 |
global $default_japanese_string_min_count; // 日本語文字最小含有数
|
364 |
|
365 |
-
// Throws SPAM Away 起動フラグ
|
366 |
-
$tsa_on_flg = get_option( 'tsa_on_flg',
|
367 |
|
368 |
// 一定時間制限チェック
|
369 |
// 一定時間内スパム認定機能<br />○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定+スパム情報保存
|
@@ -379,8 +381,8 @@ class ThrowsSpamAway {
|
|
379 |
// スパム情報保存フラグ
|
380 |
$tsa_spam_data_save = get_option( 'tsa_spam_data_save' );
|
381 |
// 一定時間制限チェック
|
382 |
-
$tsa_spam_limit_flg = get_option( 'tsa_spam_limit_flg',
|
383 |
-
if ( $tsa_spam_data_save ==
|
384 |
global $default_spam_limit_minutes;
|
385 |
global $default_spam_limit_over_interval;
|
386 |
global $default_spam_limit_count;
|
@@ -388,47 +390,47 @@ class ThrowsSpamAway {
|
|
388 |
$tsa_spam_limit_minutes = intval(get_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes ) );
|
389 |
$tsa_spam_limit_over_interval = intval(get_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval ) );
|
390 |
// ○分以内(インターバルの方が長い場合はインターバル値を利用する)の同一IPからのスパム投稿回数を調べる
|
391 |
-
$interval_minutes = ($tsa_spam_limit_minutes >= $tsa_spam_limit_over_interval ? $tsa_spam_limit_minutes : $tsa_spam_limit_over_interval );
|
392 |
|
393 |
// 上記が○回を超えているかチェック
|
394 |
-
$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']);
|
395 |
$this_ip_spam_cnt = "
|
396 |
SELECT ip_address, count(ppd) as spam_count, max(post_date)
|
397 |
FROM (select ip_address, post_date as ppd, post_date from $this->table_name) as A
|
398 |
WHERE A.ip_address = '".$ip."' AND
|
399 |
-
ppd >= '".gmdate('Y-m-d H:i:s', current_time('timestamp')-60 * $interval_minutes)."'
|
400 |
GROUP BY ip_address LIMIT 1";
|
401 |
$query = $wpdb->get_row( $this_ip_spam_cnt );
|
402 |
-
$spam_count = intval($query->spam_count);
|
403 |
|
404 |
|
405 |
// 最後のスパム投稿から○分超えていなければ アウト!!
|
406 |
$tsa_spam_limit_count = intval( get_option( 'tsa_spam_limit_count', $default_spam_limit_count ) );
|
407 |
if ( $spam_count > $tsa_spam_limit_count ) {
|
408 |
// アウト!
|
409 |
-
$error_type =
|
410 |
return FALSE;
|
411 |
}
|
412 |
}
|
413 |
// ダミーフィールド使用する場合、ダミーフィールドに入力値があればエラー
|
414 |
$tsa_dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
|
415 |
-
if ( $tsa_dummy_param_field_flg ==
|
416 |
-
if ( !empty( $_POST['tsa_param_field_tsa_3'] ) ) { // このフィールドにリクエストパラメータが入る場合はスパム判定
|
417 |
-
$error_type =
|
418 |
return FALSE;
|
419 |
}
|
420 |
}
|
421 |
// シングルバイトだけならエラー
|
422 |
-
if ($tsa_on_flg !=
|
423 |
-
$error_type =
|
424 |
return FALSE;
|
425 |
} else {
|
426 |
// 日本語文字列必須含有数
|
427 |
$tsa_japanese_string_min_count = intval( get_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count ) );
|
428 |
// NGキーワード文字列群
|
429 |
-
$tsa_ng_keywords = get_option( 'tsa_ng_keywords',
|
430 |
// キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
|
431 |
-
$tsa_must_keywords = get_option( 'tsa_must_keywords',
|
432 |
// URL数チェック
|
433 |
$tsa_url_count_check = get_option( 'tsa_url_count_on_flg', $default_url_count_check_flg );
|
434 |
// 許容URL数設定値
|
@@ -437,55 +439,55 @@ class ThrowsSpamAway {
|
|
437 |
// OKフラグ
|
438 |
$flg = FALSE;
|
439 |
// マルチバイト文字が含まれている場合は日本語が含まれていればOK
|
440 |
-
if ($tsa_on_flg !=
|
441 |
$count_flg = 0;
|
442 |
mb_regex_encoding('UTF-8');
|
443 |
-
$com_split = $newThrowsSpamAway->mb_str_split($comment);
|
444 |
-
foreach ($com_split as $it) {
|
445 |
-
if (preg_match('/[一-龠]+/u', $it)){
|
446 |
$count_flg += 1;
|
447 |
}
|
448 |
-
if (preg_match('/[ァ-ヶー]+/u', $it)){
|
449 |
$count_flg += 1;
|
450 |
}
|
451 |
-
if (preg_match('/[ぁ-ん]+/u', $it)){
|
452 |
$count_flg += 1;
|
453 |
}
|
454 |
}
|
455 |
-
$flg = ($tsa_japanese_string_min_count < $count_flg);
|
456 |
if ($flg == FALSE) {
|
457 |
-
$error_type =
|
458 |
return FALSE;
|
459 |
}
|
460 |
}
|
461 |
// 日本語文字列チェック抜けたらキーワードチェックを行う
|
462 |
-
if ( $tsa_ng_keywords !=
|
463 |
-
$keyword_list = mb_split(
|
464 |
foreach ( $keyword_list as $key ) {
|
465 |
-
if ( preg_match('/'.trim($key).
|
466 |
-
$error_type =
|
467 |
return FALSE;
|
468 |
}
|
469 |
}
|
470 |
}
|
471 |
// キーワードチェック(ブラックリスト)を抜けたら必須キーワードチェックを行う
|
472 |
-
if ( $tsa_must_keywords !=
|
473 |
-
$keyword_list = mb_split(
|
474 |
foreach ( $keyword_list as $key ) {
|
475 |
-
if ( preg_match( '/'.trim($key).
|
476 |
// OK
|
477 |
} else {
|
478 |
// 必須ワードがなかったためエラー
|
479 |
-
$error_type =
|
480 |
return FALSE;
|
481 |
}
|
482 |
}
|
483 |
}
|
484 |
// 含有URL数チェック
|
485 |
-
if ( $tsa_url_count_check !=
|
486 |
if ( substr_count( strtolower( $author.$comment ), 'http') > $tsa_ok_url_count) {
|
487 |
// URL文字列(httpの数)が多いエラー
|
488 |
-
$error_type =
|
489 |
return FALSE;
|
490 |
}
|
491 |
}
|
@@ -502,23 +504,24 @@ class ThrowsSpamAway {
|
|
502 |
* Callback admin_menu
|
503 |
*/
|
504 |
function admin_menu() {
|
505 |
-
$mincap=
|
506 |
-
$spam_mincap =
|
507 |
if (function_exists('add_menu_page')) {
|
508 |
-
add_menu_page(__('
|
509 |
}
|
510 |
|
511 |
-
if (
|
512 |
-
if (
|
513 |
-
add_submenu_page('throws-spam-away', __('スパムデータ', 'throws-spam-away'), __('スパムデータ', 'throws-spam-away'), $spam_mincap, 'throws-spam-away/throws_spam_away.class.php', array($this, 'spams_list'));
|
514 |
}
|
|
|
515 |
}
|
516 |
// 従来通りスパムデータ保存しない場合はスルーする
|
517 |
if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
|
518 |
// N/A
|
519 |
} else {
|
520 |
// プラグインアップデート時もチェックするため常に・・・
|
521 |
-
$this->
|
522 |
}
|
523 |
|
524 |
}
|
@@ -528,6 +531,7 @@ class ThrowsSpamAway {
|
|
528 |
*/
|
529 |
function options_page() {
|
530 |
global $wpdb; // WordPress DBアクセス
|
|
|
531 |
global $default_dummy_param_field_flg;
|
532 |
global $default_japanese_string_min_count;
|
533 |
global $default_caution_msg;
|
@@ -536,23 +540,28 @@ class ThrowsSpamAway {
|
|
536 |
global $default_error_msg;
|
537 |
global $default_ng_key_error_msg;
|
538 |
global $default_must_key_error_msg;
|
|
|
|
|
539 |
global $default_block_ip_address_error_msg;
|
|
|
|
|
540 |
global $default_url_count_over_error_msg;
|
541 |
global $default_ok_url_count;
|
542 |
-
global $
|
543 |
|
|
|
544 |
global $default_spam_limit_minutes;
|
545 |
global $default_spam_limit_count;
|
546 |
global $default_spam_limit_over_interval;
|
547 |
global $default_spam_limit_over_interval_error_msg;
|
548 |
|
|
|
549 |
global $default_spam_display_day_count;
|
550 |
-
|
551 |
global $default_spam_keep_day_count;
|
552 |
|
553 |
// 設定完了の場合はメッセージ表示
|
554 |
$_saved = FALSE;
|
555 |
-
if ( $_GET['settings-updated'] ==
|
556 |
$_saved = TRUE;
|
557 |
}
|
558 |
?>
|
@@ -567,129 +576,135 @@ table.form-table th {
|
|
567 |
</style>
|
568 |
<script type="text/Javascript">
|
569 |
// 配列重複チェック
|
570 |
-
var isDuplicate = function(ary, str) {
|
571 |
-
for (i = 0; i < ary.length; i++) {
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
};
|
578 |
function addIpAddresses(newAddressStr) {
|
579 |
// チェック用配列
|
580 |
var test_newAddress_list = newAddressStr.split(",");
|
581 |
-
|
582 |
// 現在の配列(テスト用)
|
583 |
-
|
584 |
var test_oldAddress_list = str.split("\n");
|
585 |
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
return false;
|
618 |
}
|
619 |
</script>
|
620 |
<div class="wrap">
|
621 |
<h2>Throws SPAM Away設定</h2>
|
622 |
-
<?php if ($_saved) { ?>
|
623 |
<div class="updated" style="padding: 10px; width: 50%;" id="message">設定の更新が完了しました。</div>
|
624 |
<?php } ?>
|
625 |
<form method="post" action="options.php">
|
626 |
<h3>スパム対策機能 設定</h3>
|
627 |
-
<?php wp_nonce_field('update-options'); ?>
|
628 |
<table class="form-table">
|
629 |
<tr valign="top">
|
630 |
<th scope="row">人の目には見えないダミーの入力項目を作成し、そこに入力があれば無視対象とする<br />(スパムプログラム投稿に有効です)</th>
|
631 |
<td><?php
|
632 |
-
$chk_1 =
|
633 |
-
$chk_2 =
|
634 |
-
if ( get_option( 'tsa_dummy_param_field_flg',
|
635 |
-
$chk_2 =
|
636 |
} else {
|
637 |
-
$chk_1 =
|
638 |
}
|
639 |
?>
|
640 |
-
<label><input type="radio" name="tsa_dummy_param_field_flg" value="1"<?php
|
641 |
-
<label><input type="radio" name="tsa_dummy_param_field_flg" value="2"<?php
|
642 |
-
※ダミー項目の制御にJavaScriptを使用しますのでJavaScript
|
|
|
643 |
</td>
|
644 |
</tr>
|
645 |
<tr valign="top"><td colspan="2"><hr/></td></tr>
|
646 |
<tr valign="top">
|
647 |
<th scope="row">日本語が存在しない場合、無視対象とする<br />(日本語文字列が存在しない場合無視対象となります。)</th>
|
648 |
<td><?php
|
649 |
-
$chk_1 =
|
650 |
-
$chk_2 =
|
651 |
-
if (get_option('tsa_on_flg',
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
|
|
658 |
</td>
|
659 |
</tr>
|
660 |
<tr valign="top">
|
661 |
<th scope="row">日本語文字列含有数<br />(この文字列に達していない場合無視対象となります。)
|
662 |
</th>
|
663 |
<td><input type="text" name="tsa_japanese_string_min_count"
|
664 |
-
value="<?php echo get_option('tsa_japanese_string_min_count', $default_japanese_string_min_count); ?>" />
|
|
|
665 |
</td>
|
666 |
</tr>
|
667 |
<tr valign="top">
|
668 |
<th scope="row">元の記事に戻ってくる時間<br />(秒)※0の場合エラー画面表示しません。
|
669 |
</th>
|
670 |
<td><input type="text" name="tsa_back_second"
|
671 |
-
value="<?php echo get_option('tsa_back_second', $default_back_second);?>" />
|
|
|
672 |
</td>
|
673 |
</tr>
|
674 |
<tr valign="top">
|
675 |
<th scope="row" id="tsa_caution_message">コメント欄の下に表示される注意文言</th>
|
676 |
<td><input type="text" name="tsa_caution_message" size="80"
|
677 |
-
value="<?php echo get_option('tsa_caution_message', $default_caution_msg);?>" /><br
|
|
|
678 |
</tr>
|
679 |
<tr valign="top">
|
680 |
<th scope="row" id="tsa_caution_msg_point">コメント注意文言の表示位置</th>
|
681 |
<td><?php
|
682 |
-
$chk_1 =
|
683 |
-
$chk_2 =
|
684 |
-
if (get_option('tsa_caution_msg_point', $default_caution_msg_point) ==
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
name="tsa_caution_msg_point" value=
|
691 |
<label><input type="radio" name="tsa_caution_msg_point" value="2"
|
692 |
-
<?php
|
|
|
693 |
</td>
|
694 |
</tr>
|
695 |
<tr><td colspan="2">※表示が崩れる場合、<a href="#tsa_caution_msg_point">「コメント注意文言の表示位置」</a>の変更 や <a href="#tsa_caution_message">「コメント欄の下に表示される注意文言」</a>を空白にすること を試してみて下さい。<br />
|
@@ -697,7 +712,7 @@ function addIpAddresses(newAddressStr) {
|
|
697 |
<tr valign="top">
|
698 |
<th scope="row">日本語文字列規定値未満エラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
|
699 |
<td><input type="text" name="tsa_error_message" size="80"
|
700 |
-
value="<?php echo get_option('tsa_error_message', $default_error_msg);?>" /><br />(初期設定:<?php echo $default_error_msg
|
701 |
</tr>
|
702 |
</table>
|
703 |
<h3>URL文字列除外 設定</h3>
|
@@ -705,26 +720,28 @@ function addIpAddresses(newAddressStr) {
|
|
705 |
<tr valign="top">
|
706 |
<th scope="row">URLらしき文字列が混入している場合エラーとするか</th>
|
707 |
<td><?php
|
708 |
-
$chk_1 =
|
709 |
-
$chk_2 =
|
710 |
-
if (get_option('tsa_url_count_on_flg',
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
name="tsa_url_count_on_flg" value=
|
717 |
<label><input type="radio" name="tsa_url_count_on_flg" value="2"
|
718 |
-
<?php
|
719 |
type="text" name="tsa_ok_url_count" size="2"
|
720 |
-
value="<?php echo get_option('tsa_ok_url_count', $default_ok_url_count);?>" />
|
|
|
721 |
</td>
|
722 |
</tr>
|
723 |
<tr valign="top">
|
724 |
<th scope="row">URLらしき文字列混入数オーバーエラー時に表示される文言 (元の記事に戻ってくる時間の間のみ表示)</th>
|
725 |
<td><input type="text" name="tsa_url_count_over_error_message"
|
726 |
size="80"
|
727 |
-
value="<?php echo get_option('tsa_url_count_over_error_message', $default_url_count_over_error_msg);?>" /><br
|
|
|
728 |
</tr>
|
729 |
</table>
|
730 |
<h3>NGキーワード / 必須キーワード 制御設定</h3>
|
@@ -733,25 +750,27 @@ function addIpAddresses(newAddressStr) {
|
|
733 |
<th scope="row">その他NGキーワード<br />(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br />挙動は同じです。NGキーワードだけでも使用できます。)
|
734 |
</th>
|
735 |
<td><input type="text" name="tsa_ng_keywords" size="80"
|
736 |
-
value="<?php echo get_option('tsa_ng_keywords',
|
737 |
</tr>
|
738 |
<tr valign="top">
|
739 |
<th scope="row">NGキーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
740 |
</th>
|
741 |
<td><input type="text" name="tsa_ng_key_error_message" size="80"
|
742 |
-
value="<?php echo get_option('tsa_ng_key_error_message', $default_ng_key_error_msg);?>" /><br
|
|
|
743 |
</tr>
|
744 |
<tr valign="top">
|
745 |
<th scope="row">その上での必須キーワード<br />(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br />指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br />必須キーワードだけでも使用できます。)
|
746 |
</th>
|
747 |
<td><input type="text" name="tsa_must_keywords" size="80"
|
748 |
-
value="<?php echo get_option('tsa_must_keywords',
|
749 |
</tr>
|
750 |
<tr valign="top">
|
751 |
<th scope="row">必須キーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
752 |
</th>
|
753 |
<td><input type="text" name="tsa_must_key_error_message" size="80"
|
754 |
-
value="<?php echo get_option('tsa_must_key_error_message', $default_must_key_error_msg);?>" /><br
|
|
|
755 |
</tr>
|
756 |
</table>
|
757 |
<h3>トラックバックへの対応設定</h3>
|
@@ -759,32 +778,34 @@ function addIpAddresses(newAddressStr) {
|
|
759 |
<tr valign="top">
|
760 |
<th scope="row">上記設定をトラックバック記事にも採用する</th>
|
761 |
<td><?php
|
762 |
-
$chk_1 =
|
763 |
-
$chk_2 =
|
764 |
-
if (get_option('tsa_tb_on_flg',
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
value=
|
771 |
-
type="radio" name="tsa_tb_on_flg" value="2" <?php
|
|
|
772 |
</td>
|
773 |
</tr>
|
774 |
<tr valign="top">
|
775 |
-
<th scope="row">トラックバック記事にも採用する場合、ついでにこちらのURL
|
776 |
</th>
|
777 |
<td><?php
|
778 |
-
$chk_1 =
|
779 |
-
$chk_2 =
|
780 |
-
if (get_option('tsa_tb_url_flg',
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
value=
|
787 |
-
type="radio" name="tsa_tb_url_flg" value="2" <?php
|
|
|
788 |
</td>
|
789 |
</tr>
|
790 |
</table>
|
@@ -793,43 +814,45 @@ function addIpAddresses(newAddressStr) {
|
|
793 |
<tr valign="top">
|
794 |
<th scope="row">SPAMブラックリスト利用</th>
|
795 |
<td><?php
|
796 |
-
$chk =
|
797 |
-
if (get_option('tsa_spam_champuru_flg',
|
798 |
-
$chk =
|
799 |
}
|
800 |
?>
|
801 |
-
<label><input type="checkbox" name="tsa_spam_champuru_flg" value=
|
|
|
802 |
</td>
|
803 |
</tr>
|
804 |
<tr valign="top">
|
805 |
<th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
|
806 |
<td><?php
|
807 |
-
$chk =
|
808 |
-
if (get_option('tsa_ip_block_from_spam_chk_flg',
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
name="tsa_ip_block_from_spam_chk_flg" value=
|
813 |
-
<?php
|
|
|
814 |
<?php
|
815 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
816 |
$results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
|
817 |
?>現在「spam」フラグが付いているIPアドレス:<br />
|
818 |
<blockquote>
|
819 |
<?php
|
820 |
-
$add_ip_addresses =
|
821 |
-
foreach ($results as $item) {
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
<b><?php
|
830 |
<?php
|
831 |
-
|
832 |
-
|
833 |
<input type="button"
|
834 |
onclick="javascript:addIpAddresses('<?php echo $add_ip_addresses; ?>');"
|
835 |
value="これらのIPアドレスを任意のブロック対象IPアドレスにコピーする" /><br />
|
@@ -840,14 +863,14 @@ function addIpAddresses(newAddressStr) {
|
|
840 |
<th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br />改行区切りで複数設定できます。(半角数字とスラッシュ、ドットのみ)<br />※カンマは自動的に改行に変換されます
|
841 |
</th>
|
842 |
<td><textarea name="tsa_block_ip_addresses"
|
843 |
-
id="tsa_block_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_block_ip_addresses',
|
844 |
</tr>
|
845 |
<tr valign="top">
|
846 |
<th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
847 |
</th>
|
848 |
<td><input type="text" name="tsa_block_ip_address_error_message"
|
849 |
size="80"
|
850 |
-
value="<?php echo get_option('tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
|
851 |
</tr>
|
852 |
<tr style="background-color: #fefefe;"><td colspan="2">※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
|
853 |
<tr style="background-color: #fefefe;" valign="top">
|
@@ -855,7 +878,7 @@ function addIpAddresses(newAddressStr) {
|
|
855 |
<td>
|
856 |
※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)
|
857 |
<textarea name="tsa_white_ip_addresses"
|
858 |
-
id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_white_ip_addresses',
|
859 |
</td>
|
860 |
</tr>
|
861 |
|
@@ -865,7 +888,7 @@ function addIpAddresses(newAddressStr) {
|
|
865 |
<table class="form-table">
|
866 |
<tr valign="top">
|
867 |
<td>
|
868 |
-
<textarea name="tsa_memo" style="width: 80%;" rows="10"><?php echo get_option('tsa_memo',
|
869 |
|
870 |
</td>
|
871 |
</tr>
|
@@ -875,13 +898,14 @@ function addIpAddresses(newAddressStr) {
|
|
875 |
<tr valign="top">
|
876 |
<th scope="row">スパムコメント投稿情報を保存しますか?</th>
|
877 |
<td><?php
|
878 |
-
$chk =
|
879 |
-
if (get_option('tsa_spam_data_save',
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
name="tsa_spam_data_save" value=
|
884 |
-
SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count);
|
|
|
885 |
</td>
|
886 |
</tr>
|
887 |
<tr>
|
@@ -889,15 +913,15 @@ function addIpAddresses(newAddressStr) {
|
|
889 |
<td>
|
890 |
<input
|
891 |
type="text" name="tsa_spam_keep_day_count" size="3"
|
892 |
-
value="<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>"
|
893 |
<?php
|
894 |
-
$chk =
|
895 |
-
if (get_option('tsa_spam_data_delete_flg',
|
896 |
-
$chk =
|
897 |
}
|
898 |
?>
|
899 |
-
<label><input type="checkbox" name="tsa_spam_data_delete_flg" value=
|
900 |
-
<?php
|
901 |
※一度消したデータは復活出来ませんのでご注意ください。また最低7日分は保存されます。
|
902 |
</td>
|
903 |
</tr>
|
@@ -909,21 +933,22 @@ function addIpAddresses(newAddressStr) {
|
|
909 |
<tr>
|
910 |
<th scope="row">機能設定</th>
|
911 |
<td><?php
|
912 |
-
$chk =
|
913 |
-
if (get_option('tsa_spam_limit_flg',
|
914 |
-
$chk =
|
915 |
}
|
916 |
-
?> <label><input type="checkbox" name="tsa_spam_limit_flg" value=
|
917 |
-
<?php
|
918 |
type="text" name="tsa_spam_limit_minutes" size="3"
|
919 |
-
value="<?php echo get_option('tsa_spam_limit_minutes', $default_spam_limit_minutes); ?>" />分以内に
|
920 |
一定回数:<input type="text" name="tsa_spam_limit_count" size="3"
|
921 |
-
value="<?php echo get_option('tsa_spam_limit_count', $default_spam_limit_count); ?>" />回スパムとなったら<b>次から</b>
|
922 |
一定時間:<input type="text" name="tsa_spam_limit_over_interval" size="3"
|
923 |
-
value="<?php echo get_option('tsa_spam_limit_over_interval', $default_spam_limit_over_interval); ?>" />分間<br />
|
|
|
924 |
当該IPアドレスからのコメントを強制スパム扱いします。<br /> エラーメッセージは:<input type="text"
|
925 |
name="tsa_spam_limit_over_interval_error_message" size="80"
|
926 |
-
value="<?php echo get_option('tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg); ?>" /><br />
|
927 |
(初期設定:<?php echo $default_spam_limit_over_interval_error_msg; ?>)
|
928 |
</td>
|
929 |
</tr>
|
@@ -941,66 +966,66 @@ function addIpAddresses(newAddressStr) {
|
|
941 |
<?php
|
942 |
}
|
943 |
|
944 |
-
function trackback_spam_away($tb) {
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) ==
|
979 |
$spam_contents = array();
|
980 |
-
$spam_contents['error_type'] =
|
981 |
-
$spam_contents['author'] = mb_strcut(strip_tags($author), 0, 255);
|
982 |
-
$spam_contents['comment'] = mb_strcut(strip_tags($comment), 0, 255);
|
983 |
|
984 |
$this->save_post_meta( $post_id, $ip, $spam_contents );
|
985 |
}
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
global $wpdb;
|
997 |
// IPアドレスがなければNULL返却
|
998 |
if ( $ip_address == NULL ) {
|
999 |
return NULL;
|
1000 |
}
|
1001 |
// 最終コメント情報取得
|
1002 |
-
$qry_str = "SELECT post_date, post_id FROM $this->table_name WHERE ip_address = '".htmlspecialchars($ip_address)."' ORDER BY post_date DESC LIMIT 1 ";
|
1003 |
-
$results = $wpdb->get_results($qry_str);
|
1004 |
if ( count( $results ) > 0 ) {
|
1005 |
return $results[0];
|
1006 |
}
|
@@ -1015,10 +1040,16 @@ function addIpAddresses(newAddressStr) {
|
|
1015 |
function spams_list() {
|
1016 |
global $wpdb;
|
1017 |
$_saved = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
|
1018 |
// スパム情報から 特定IPアドレス削除
|
1019 |
if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
|
1020 |
-
$remove_ip_address = @htmlspecialchars($_POST['ip_address']);
|
1021 |
-
if ( !isset($remove_ip_address) || strlen($remove_ip_address) == 0 ) {
|
1022 |
// N/A
|
1023 |
} else {
|
1024 |
// スパムデータベースから特定IP情報削除
|
@@ -1029,14 +1060,11 @@ function addIpAddresses(newAddressStr) {
|
|
1029 |
$message = "スパムデータから $remove_ip_address のデータを削除しました。";
|
1030 |
}
|
1031 |
} elseif ( $_POST['act'] != NULL && $_POST['act'] == "add_ip" ) {
|
1032 |
-
$add_ip_address = @htmlspecialchars($_POST['ip_address']);
|
1033 |
-
if ( !isset($add_ip_address) || strlen($add_ip_address) == 0 ) {
|
1034 |
// N/A
|
1035 |
} else {
|
1036 |
// 対象IPアドレスに一つ追加
|
1037 |
-
$block_ip_addresses_str = get_option('tsa_block_ip_addresses', '');
|
1038 |
-
$block_ip_addresses = str_replace("\n", ",", $block_ip_addresses_str);
|
1039 |
-
$ip_list = mb_split( ",", $block_ip_addresses );
|
1040 |
$dup_flg = FALSE;
|
1041 |
foreach ( $ip_list as $ip ) {
|
1042 |
if ( $ip == trim($add_ip_address) ) {
|
@@ -1054,13 +1082,19 @@ function addIpAddresses(newAddressStr) {
|
|
1054 |
}
|
1055 |
}
|
1056 |
}
|
1057 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1058 |
$_saved = TRUE;
|
1059 |
}
|
1060 |
?>
|
1061 |
<div class="wrap">
|
1062 |
<?php
|
1063 |
-
if ( get_option( 'tsa_spam_data_save' ) ==
|
1064 |
// 日数
|
1065 |
$gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
|
1066 |
if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
|
@@ -1070,8 +1104,8 @@ function addIpAddresses(newAddressStr) {
|
|
1070 |
?>
|
1071 |
<h2>Throws SPAM Away スパムデータ</h2>
|
1072 |
<h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
|
1073 |
-
<?php if ($_saved) { ?>
|
1074 |
-
<div class="updated" style="padding: 10px; width: 50%;" id="message"><?php
|
1075 |
<?php } ?>
|
1076 |
<div style="background-color: #efefef;">
|
1077 |
<table style="width: 100%; border: none;">
|
@@ -1080,12 +1114,12 @@ function addIpAddresses(newAddressStr) {
|
|
1080 |
$total_qry = "
|
1081 |
SELECT count(ppd) as pageview, ppd
|
1082 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
|
1083 |
-
GROUP BY ppd HAVING ppd >= '".gmdate('Y-m-d', current_time('timestamp')-86400
|
1084 |
ORDER BY pageview DESC
|
1085 |
LIMIT 1
|
1086 |
";
|
1087 |
-
$qry = $wpdb->get_row($total_qry);
|
1088 |
-
$maxxday
|
1089 |
|
1090 |
$total_vis = "
|
1091 |
SELECT count(distinct ip_address) as vis, ppd
|
@@ -1094,7 +1128,7 @@ function addIpAddresses(newAddressStr) {
|
|
1094 |
ORDER BY vis DESC
|
1095 |
LIMIT 1
|
1096 |
";
|
1097 |
-
$qry_vis = $wpdb->get_row($total_vis);
|
1098 |
$maxxday += $qry_vis->vis;
|
1099 |
|
1100 |
if ( $maxxday == 0 ) {
|
@@ -1108,38 +1142,37 @@ function addIpAddresses(newAddressStr) {
|
|
1108 |
$visitor_qry = "
|
1109 |
SELECT count(DISTINCT ip_address) AS total
|
1110 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
|
1111 |
-
WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400
|
1112 |
";
|
1113 |
-
$qry_visitors = $wpdb->get_row($visitor_qry);
|
1114 |
-
$px_visitors = round($qry_visitors->total*100
|
1115 |
// TOTAL
|
1116 |
$pageview_qry = "
|
1117 |
SELECT count(ppd) as total
|
1118 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
|
1119 |
-
WHERE ppd = '".gmdate('Y-m-d', current_time('timestamp')-86400
|
1120 |
";
|
1121 |
-
$qry_pageviews = $wpdb->get_row($pageview_qry);
|
1122 |
-
$px_pageviews = round($qry_pageviews->total*100
|
1123 |
$px_white = 100 - $px_pageviews - $px_visitors;
|
1124 |
-
if ($px_white < 0) {
|
1125 |
-
|
1126 |
-
|
1127 |
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
<div style='background:#ffffff;width:100%;height:".$px_white."px;'></div>
|
1134 |
<div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
|
1135 |
<div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
|
1136 |
<div style='background:gray;width:100%;height:1px;'></div>
|
1137 |
-
<br />".gmdate('d', current_time('timestamp')-86400
|
1138 |
<div style='background:$ffffff;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
|
1139 |
<br clear=\"all\" /></div>
|
1140 |
</td>\n";
|
1141 |
-
}
|
1142 |
-
?>
|
1143 |
</tr>
|
1144 |
</table>
|
1145 |
</div>
|
@@ -1164,11 +1197,11 @@ function addIpAddresses(newAddressStr) {
|
|
1164 |
<p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
|
1165 |
<p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
|
1166 |
<?php if ( count( $results ) > 0 ) {
|
1167 |
-
$p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),
|
1168 |
-
wp_enqueue_script(
|
1169 |
-
wp_enqueue_style(
|
1170 |
-
wp_enqueue_script(
|
1171 |
-
wp_enqueue_style(
|
1172 |
?>
|
1173 |
<style type="text/css">
|
1174 |
<!--
|
@@ -1307,9 +1340,9 @@ function addIpAddresses(newAddressStr) {
|
|
1307 |
|
1308 |
.cols0 { width: 200px; }
|
1309 |
.cols1 { width: 50px; }
|
1310 |
-
.cols2 { width:
|
1311 |
-
.cols3 { width:
|
1312 |
-
.cols4 { width:
|
1313 |
|
1314 |
-->
|
1315 |
</style>
|
@@ -1327,22 +1360,22 @@ function addIpAddresses(newAddressStr) {
|
|
1327 |
});
|
1328 |
// tipTip
|
1329 |
jQuery(".tip").tipTip({
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
|
1337 |
});
|
1338 |
jQuery(".tip_click").tipTip({
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
});
|
1347 |
|
1348 |
});
|
@@ -1385,59 +1418,68 @@ function addIpAddresses(newAddressStr) {
|
|
1385 |
</tr>
|
1386 |
</thead>
|
1387 |
<tbody>
|
1388 |
-
|
1389 |
-
foreach ($results as $item) {
|
1390 |
$spam_ip = $item->ip_address;
|
1391 |
$spam_cnt = $item->cnt;
|
1392 |
$last_post_date = $item->post_date;
|
1393 |
$spam_error_type = $item->error_type;
|
1394 |
-
$spam_author = strip_tags($item->author);
|
1395 |
-
$spam_comment = strip_tags($item->comment);
|
1396 |
|
1397 |
// エラー変換
|
1398 |
$spam_error_type_str = $spam_error_type;
|
1399 |
-
switch ($spam_error_type) {
|
1400 |
-
case
|
1401 |
-
$spam_error_type_str =
|
1402 |
break;
|
1403 |
-
case
|
1404 |
-
$spam_error_type_str =
|
1405 |
break;
|
1406 |
-
case
|
1407 |
-
$spam_error_type_str =
|
1408 |
break;
|
1409 |
-
case
|
1410 |
-
$spam_error_type_str =
|
1411 |
break;
|
1412 |
-
case
|
1413 |
-
$spam_error_type_str =
|
1414 |
break;
|
1415 |
-
case
|
1416 |
-
$spam_error_type_str =
|
1417 |
break;
|
1418 |
-
case
|
1419 |
-
$spam_error_type_str =
|
1420 |
break;
|
1421 |
-
case
|
1422 |
-
$spam_error_type_str =
|
1423 |
break;
|
1424 |
}
|
1425 |
-
|
1426 |
<tr>
|
1427 |
<td>
|
1428 |
<b><a href="javascript:void(0);"
|
1429 |
-
onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php
|
1430 |
</a></b><br clear="all" />
|
1431 |
<input type="button"
|
1432 |
-
onclick="javascript:removeIpAddressOnData('<?php
|
1433 |
value="スパムデータから削除する" />
|
1434 |
</td>
|
1435 |
-
<td><?php
|
1436 |
-
<td><?php
|
1437 |
-
<td
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1441 |
</td>
|
1442 |
</tr>
|
1443 |
<?php
|
@@ -1461,10 +1503,18 @@ function addIpAddresses(newAddressStr) {
|
|
1461 |
<input type="hidden" name="act" value="add_ip" />
|
1462 |
</form>
|
1463 |
<p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
|
|
|
|
|
|
|
|
|
1464 |
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
|
|
|
|
|
|
|
|
1468 |
<?php
|
1469 |
}
|
1470 |
|
10 |
|
11 |
// version
|
12 |
var $version = '2.6';
|
13 |
+
var $table_name = NULL;
|
14 |
|
15 |
public function __construct() {
|
16 |
global $default_spam_data_save;
|
24 |
global $lower_spam_keep_day_count;
|
25 |
|
26 |
// 保存期間終了したデータ削除
|
27 |
+
$skdc = intval( get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count ) );
|
28 |
if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
|
29 |
+
if ( get_option( 'tsa_spam_data_delete_flg', '' ) == '1' ) {
|
30 |
+
// 期間 get_option( 'tsa_spam_keep_day_count' ) 日
|
31 |
$wpdb->query(
|
32 |
+
'DELETE FROM '.$this->table_name." WHERE post_date < '".gmdate( 'Y-m-d 23:59:59', current_time( 'timestamp' ) - 86400 * $skdc )."'"
|
33 |
);
|
34 |
}
|
35 |
}
|
38 |
* スパム投稿テーブル作成
|
39 |
* $flg がTRUEなら強制的にテーブル作成
|
40 |
*/
|
41 |
+
function tsa_create_tbl() {
|
42 |
global $wpdb;
|
43 |
global $tsa_db_version;
|
44 |
|
45 |
// テーブル作成要フラグ
|
46 |
$flg = FALSE;
|
47 |
+
if ( $wpdb->get_var( "SHOW TABLES LIKE '$this->table_name'" ) != $this->table_name ) {
|
48 |
// テーブルが存在しないため作成する
|
49 |
$flg = TRUE;
|
50 |
}
|
54 |
//現在のDBバージョン取得
|
55 |
$installed_ver = get_option( 'tsa_meta_version', 0 );
|
56 |
// DBバージョンが低い または テーブルが存在しない場合は作成
|
57 |
+
if ( $flg == TRUE || $installed_ver < $tsa_db_version ) {
|
58 |
// dbDeltaのおかげ様でCREATE文のみ
|
59 |
+
$sql = "CREATE TABLE $this->table_name (
|
60 |
meta_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
|
61 |
post_id bigint(20) UNSIGNED DEFAULT '0' NOT NULL,
|
62 |
ip_address varchar(64),
|
82 |
function save_post_meta( $post_id, $ip_address, $spam_contents ) {
|
83 |
global $default_spam_data_save;
|
84 |
|
85 |
+
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) != '1' ) return;
|
86 |
|
87 |
global $wpdb;
|
88 |
|
89 |
$error_type = $spam_contents['error_type'];
|
90 |
+
$author = strip_tags( $spam_contents['author'] );
|
91 |
+
$comment = strip_tags( $spam_contents['comment'] );
|
92 |
|
93 |
//保存するために配列にする
|
94 |
$set_arr = array(
|
96 |
'ip_address' => $ip_address,
|
97 |
'error_type' => $error_type,
|
98 |
'author' => $author,
|
99 |
+
'comment' => $comment,
|
100 |
);
|
101 |
|
102 |
//レコード新規追加
|
109 |
function tsa_scripts_init() {
|
110 |
global $tsa_version;
|
111 |
// anti-spam の方法を参考に作成しました
|
112 |
+
if ( ! is_admin() ) {
|
113 |
+
wp_enqueue_script( 'throws-spam-away-script', plugins_url( '/js/tsa_params.min.js', __FILE__ ), array( 'jquery' ), $tsa_version );
|
114 |
}
|
115 |
}
|
116 |
|
128 |
function comment_form_dummy_param_field() {
|
129 |
global $default_dummy_param_field_flg;
|
130 |
// 空パラメータフィールド作成
|
131 |
+
$dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
|
132 |
+
if ( $dummy_param_field_flg == '1' ) {
|
133 |
echo '<p class="tsa_param_field_tsa_" style="display:none;">email confirm<span class="required">*</span><input type="text" name="tsa_email_param_field___" id="tsa_email_param_field___" size="30" value="" />
|
134 |
</p>';
|
135 |
+
echo '<p class="tsa_param_field_tsa_2">post date<span class="required">*</span><input type="text" name="tsa_param_field_tsa_3" id="tsa_param_field_tsa_3" size="30" value="'.date( 'Y-m-d H:i:s' ).'" />
|
136 |
</p>';
|
137 |
}
|
138 |
return TRUE;
|
151 |
global $error_type;
|
152 |
|
153 |
// ログインしている場合は通過させます。
|
154 |
+
if ( $user_ID ) {
|
155 |
return $id;
|
156 |
}
|
157 |
// コメント(comment)及び名前(author)の中も検査
|
158 |
+
$author = esc_attr( $_POST['author'] );
|
159 |
+
$comment = esc_attr( $_POST['comment'] );
|
160 |
|
161 |
// チェック対象IPアドレス
|
162 |
$ip = $_SERVER['REMOTE_ADDR'];
|
163 |
|
164 |
// ホワイトリスト優先通過
|
165 |
// IP制御 任意のIPアドレスをあればブロックする
|
166 |
+
$white_ip_addresses = get_option( 'tsa_white_ip_addresses', '' );
|
167 |
+
if ( $white_ip_addresses != NULL && $white_ip_addresses != '' ) {
|
168 |
// 改行区切りの場合はカンマ区切りに文字列置換後リスト化
|
169 |
+
$white_ip_addresses = str_replace( "\n", ',', $white_ip_addresses );
|
170 |
+
$ip_list = mb_split( ',', $white_ip_addresses );
|
171 |
foreach ( $ip_list as $_ip ) {
|
172 |
// 指定IPが範囲指定の場合 例:192.168.1.0/24
|
173 |
+
if ( strpos( $_ip, '/' ) != FALSE ) {
|
174 |
+
if ( $this->in_cidr( $ip, $_ip ) ) {
|
175 |
// 通過対象
|
176 |
return $id;
|
177 |
}
|
182 |
}
|
183 |
}
|
184 |
// IP系の検査
|
185 |
+
if ( ! $newThrowsSpamAway->ip_check( $ip ) ) {
|
186 |
// アウト!
|
187 |
} else
|
188 |
// コメント検査
|
189 |
+
if ( $newThrowsSpamAway->validation( $comment, $author ) ) {
|
190 |
return $id;
|
191 |
}
|
192 |
+
$error_msg = '';
|
193 |
switch ( $error_type ) {
|
194 |
+
case 'must_word' :
|
195 |
$error_msg = get_option( 'tsa_must_key_error_message', $default_must_key_error_msg );
|
196 |
break;
|
197 |
+
case 'ng_word' :
|
198 |
$error_msg = get_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg );
|
199 |
break;
|
200 |
+
case 'block_ip' :
|
201 |
$error_msg = get_option( 'tsa_block_ip_address_error_message', $default_block_ip_address_error_msg );
|
202 |
break;
|
203 |
+
case 'url_count_over' :
|
204 |
$error_msg = get_option( 'tsa_url_count_over_error_message', $default_url_count_over_error_msg );
|
205 |
break;
|
206 |
+
case 'spam_limit_over' :
|
207 |
$error_msg = get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg );
|
208 |
break;
|
209 |
+
case 'dummy_param_field' : // ダミーフィールドの場合は通常メッセージ
|
210 |
default :
|
211 |
$error_msg = get_option( 'tsa_error_message', $default_error_msg );
|
212 |
}
|
213 |
// 記録する場合はDB記録
|
214 |
+
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == '1' ) {
|
215 |
$spam_contents = array();
|
216 |
$spam_contents['error_type'] = $error_type;
|
217 |
+
$spam_contents['author'] = mb_strcut( $author, 0, 255 );
|
218 |
+
$spam_contents['comment'] = mb_strcut( $comment, 0, 255 );
|
219 |
|
220 |
$this->save_post_meta( $id, $ip, $spam_contents );
|
221 |
}
|
223 |
$back_time = ( (int) get_option( 'tsa_back_second', $default_back_second ) ) * 1000;
|
224 |
// タイム値が0なら元画面へそのままリダイレクト
|
225 |
if ( $back_time == 0 ) {
|
226 |
+
header( 'Location:'.$_SERVER['HTTP_REFERER'] );
|
227 |
die;
|
228 |
} else {
|
229 |
+
wp_die( __( $error_msg.'<script type="text/javascript">window.setTimeout(location.href=\''.$_SERVER['HTTP_REFERER'].'\', '.$back_time.');</script>', 'throws-spam-away' ) );
|
230 |
}
|
231 |
}
|
232 |
|
236 |
*/
|
237 |
function ip_check( $target_ip ) {
|
238 |
global $wpdb; // WordPress DBアクセス
|
239 |
+
global $default_spam_champuru_flg; // すぱむちゃんぷるー利用初期値
|
240 |
global $newThrowsSpamAway;
|
241 |
global $error_type;
|
242 |
// スパムフィルター利用あれば始めに通す
|
243 |
// 1.スパムちゃんぷるー
|
244 |
+
$spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg', $default_spam_champuru_flg );
|
245 |
+
if ( get_option( 'tsa_spam_champuru_flg', '' ) == '1' ) {
|
246 |
+
return $this->reject_spam_ip( $target_ip );
|
247 |
}
|
248 |
// 2.以降あれば追加
|
249 |
|
250 |
// IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
|
251 |
$ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
|
252 |
|
253 |
+
if ( $ip_block_from_spam_chk_flg === '1' ) {
|
254 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
255 |
$results = $wpdb->get_results( "SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC " );
|
256 |
foreach ( $results as $item ) {
|
257 |
if ( trim( $item->comment_author_IP ) == trim( $target_ip ) ) {
|
258 |
// ブロックしたいIP
|
259 |
+
$error_type = 'block_ip';
|
260 |
return FALSE;
|
261 |
}
|
262 |
}
|
263 |
}
|
264 |
// IP制御 任意のIPアドレスをあればブロックする
|
265 |
+
$block_ip_addresses = get_option( 'tsa_block_ip_addresses', '' );
|
266 |
+
if ( $block_ip_addresses != NULL && $block_ip_addresses != '' ) {
|
267 |
// 改行区切りの場合はカンマ区切りに文字列置換後リスト化
|
268 |
+
$block_ip_addresses = str_replace( "\n", ',', $block_ip_addresses );
|
269 |
+
$ip_list = mb_split( ',', $block_ip_addresses );
|
270 |
foreach ( $ip_list as $ip ) {
|
271 |
// 指定IPが範囲指定の場合 例:192.168.1.0/24
|
272 |
+
if ( strpos( $ip, '/' ) != FALSE ) {
|
273 |
+
if ( $this->in_cidr( $target_ip, $ip ) ) {
|
274 |
// ブロックしたいIP
|
275 |
+
$error_type = 'block_ip';
|
276 |
return FALSE;
|
277 |
}
|
278 |
} elseif ( trim( $ip ) == trim( $target_ip ) ) {
|
279 |
// ブロックしたいIP
|
280 |
+
$error_type = 'block_ip';
|
281 |
return FALSE;
|
282 |
} else {
|
283 |
// セーフIP
|
290 |
/**
|
291 |
* スパムちゃんぷるー利用ブロック
|
292 |
*/
|
293 |
+
function reject_spam_ip( $ip ) {
|
294 |
global $spam_champuru_host;
|
295 |
global $error_type;
|
296 |
|
297 |
+
$spam_def_ip = '127.0.0.2';
|
298 |
+
$host = $spam_champuru_host;
|
299 |
$pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
|
300 |
+
$check_IP = trim( preg_match( $pattern, $ip ) ? $ip : $_SERVER['REMOTE_ADDR'] );
|
301 |
+
$spam = false;
|
302 |
+
if ( preg_match( $pattern, $check_IP ) ) {
|
303 |
+
$host = implode( '.',array_reverse( split( '\.',$check_IP ) ) ) . '.' . $host;
|
304 |
+
if ( function_exists( 'dns_get_record' ) ) {
|
305 |
+
$check_recs = dns_get_record( $host, DNS_A );
|
306 |
+
if ( isset( $check_recs[0]['ip'] ) ) $spam = ( $check_recs[0]['ip'] === $spam_def_ip );
|
307 |
+
unset( $check_recs );
|
308 |
+
} elseif ( function_exists( 'gethostbyname' ) ) {
|
309 |
+
$checked = ( gethostbyname( $host ) === $spam_def_ip );
|
310 |
+
} elseif ( class_exists( 'Net_DNS_Resolver' ) ) {
|
311 |
$resolver = new Net_DNS_Resolver();
|
312 |
+
$response = $resolver->query( $host, 'A' );
|
313 |
+
if ( $response ) {
|
314 |
+
foreach ( $response->answer as $rr ) {
|
315 |
+
if ( $rr->type === 'A' ) {
|
316 |
+
$spam = ( $rr->address === $spam_def_ip );
|
317 |
break;
|
318 |
}
|
319 |
}
|
320 |
}
|
321 |
+
unset( $response );
|
322 |
+
unset( $resolver );
|
323 |
+
} elseif ( function_exists( 'checkdnsrr' ) ) {
|
324 |
+
$spam = ( checkdnsrr( $host, 'A' ) === true );
|
325 |
}
|
326 |
}
|
327 |
+
if ( $spam ) {
|
328 |
+
$error_type = 'block_ip';
|
329 |
return FALSE;
|
330 |
}
|
331 |
return TRUE;
|
337 |
* @param string $cidr
|
338 |
* @return boolean
|
339 |
*/
|
340 |
+
function in_cidr( $ip, $cidr ) {
|
341 |
+
list( $network, $mask_bit_len ) = explode( '/', $cidr );
|
342 |
+
if ( ! is_nan( $mask_bit_len ) && $mask_bit_len <= 32 ) {
|
343 |
$host = 32 - $mask_bit_len;
|
344 |
$net = ip2long($network) >> $host << $host; // 11000000101010000000000000000000
|
345 |
+
$ip_net = ip2long($ip) >> $host << $host; // 11000000101010000000000000000000
|
346 |
return $net === $ip_net;
|
347 |
} else {
|
348 |
// 形式が不正ならば無視するためFALSE
|
358 |
function validation( $comment, $author ) {
|
359 |
global $newThrowsSpamAway;
|
360 |
global $error_type;
|
361 |
+
global $default_on_flg; // 日本語以外を弾くかどうか初期値
|
362 |
+
global $default_dummy_param_field_flg; // ダミー項目によるスパム判定初期値
|
363 |
+
global $default_url_count_check_flg; // URL数を制御するか初期設定値
|
364 |
+
global $default_ok_url_count; // 制限する場合のURL数初期設定値
|
365 |
global $default_japanese_string_min_count; // 日本語文字最小含有数
|
366 |
|
367 |
+
// Throws SPAM Away 起動フラグ '1':起動 "2":オフ
|
368 |
+
$tsa_on_flg = get_option( 'tsa_on_flg', $default_tsa_on );
|
369 |
|
370 |
// 一定時間制限チェック
|
371 |
// 一定時間内スパム認定機能<br />○分以内に○回スパムとなったら○分間、当該IPからのコメントはスパム扱いする設定+スパム情報保存
|
381 |
// スパム情報保存フラグ
|
382 |
$tsa_spam_data_save = get_option( 'tsa_spam_data_save' );
|
383 |
// 一定時間制限チェック
|
384 |
+
$tsa_spam_limit_flg = get_option( 'tsa_spam_limit_flg', '' );
|
385 |
+
if ( $tsa_spam_data_save == '1' && $tsa_spam_limit_flg == '1' ) {
|
386 |
global $default_spam_limit_minutes;
|
387 |
global $default_spam_limit_over_interval;
|
388 |
global $default_spam_limit_count;
|
390 |
$tsa_spam_limit_minutes = intval(get_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes ) );
|
391 |
$tsa_spam_limit_over_interval = intval(get_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval ) );
|
392 |
// ○分以内(インターバルの方が長い場合はインターバル値を利用する)の同一IPからのスパム投稿回数を調べる
|
393 |
+
$interval_minutes = ( $tsa_spam_limit_minutes >= $tsa_spam_limit_over_interval ? $tsa_spam_limit_minutes : $tsa_spam_limit_over_interval );
|
394 |
|
395 |
// 上記が○回を超えているかチェック
|
396 |
+
$ip = htmlspecialchars( $_SERVER['REMOTE_ADDR'] );
|
397 |
$this_ip_spam_cnt = "
|
398 |
SELECT ip_address, count(ppd) as spam_count, max(post_date)
|
399 |
FROM (select ip_address, post_date as ppd, post_date from $this->table_name) as A
|
400 |
WHERE A.ip_address = '".$ip."' AND
|
401 |
+
ppd >= '".gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) - 60 * $interval_minutes )."'
|
402 |
GROUP BY ip_address LIMIT 1";
|
403 |
$query = $wpdb->get_row( $this_ip_spam_cnt );
|
404 |
+
$spam_count = intval( $query->spam_count );
|
405 |
|
406 |
|
407 |
// 最後のスパム投稿から○分超えていなければ アウト!!
|
408 |
$tsa_spam_limit_count = intval( get_option( 'tsa_spam_limit_count', $default_spam_limit_count ) );
|
409 |
if ( $spam_count > $tsa_spam_limit_count ) {
|
410 |
// アウト!
|
411 |
+
$error_type = 'spam_limit_over';
|
412 |
return FALSE;
|
413 |
}
|
414 |
}
|
415 |
// ダミーフィールド使用する場合、ダミーフィールドに入力値があればエラー
|
416 |
$tsa_dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
|
417 |
+
if ( $tsa_dummy_param_field_flg == '1') {
|
418 |
+
if ( ! empty( $_POST['tsa_param_field_tsa_3'] ) ) { // このフィールドにリクエストパラメータが入る場合はスパム判定
|
419 |
+
$error_type = 'dummy_param_field';
|
420 |
return FALSE;
|
421 |
}
|
422 |
}
|
423 |
// シングルバイトだけならエラー
|
424 |
+
if ( $tsa_on_flg != '2' && strlen( bin2hex( $comment ) ) / 2 == mb_strlen( $comment ) ) {
|
425 |
+
$error_type = 'not_japanese';
|
426 |
return FALSE;
|
427 |
} else {
|
428 |
// 日本語文字列必須含有数
|
429 |
$tsa_japanese_string_min_count = intval( get_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count ) );
|
430 |
// NGキーワード文字列群
|
431 |
+
$tsa_ng_keywords = get_option( 'tsa_ng_keywords', '' );
|
432 |
// キーワード文字列群 ※ブラックリストと重複するものはブラックリストのほうが優先です。
|
433 |
+
$tsa_must_keywords = get_option( 'tsa_must_keywords', '' );
|
434 |
// URL数チェック
|
435 |
$tsa_url_count_check = get_option( 'tsa_url_count_on_flg', $default_url_count_check_flg );
|
436 |
// 許容URL数設定値
|
439 |
// OKフラグ
|
440 |
$flg = FALSE;
|
441 |
// マルチバイト文字が含まれている場合は日本語が含まれていればOK
|
442 |
+
if ( $tsa_on_flg != '2' ) {
|
443 |
$count_flg = 0;
|
444 |
mb_regex_encoding('UTF-8');
|
445 |
+
$com_split = $newThrowsSpamAway->mb_str_split( $comment );
|
446 |
+
foreach ( $com_split as $it ) {
|
447 |
+
if ( preg_match('/[一-龠]+/u', $it ) ){
|
448 |
$count_flg += 1;
|
449 |
}
|
450 |
+
if ( preg_match('/[ァ-ヶー]+/u', $it ) ){
|
451 |
$count_flg += 1;
|
452 |
}
|
453 |
+
if ( preg_match('/[ぁ-ん]+/u', $it ) ){
|
454 |
$count_flg += 1;
|
455 |
}
|
456 |
}
|
457 |
+
$flg = ( $tsa_japanese_string_min_count < $count_flg );
|
458 |
if ($flg == FALSE) {
|
459 |
+
$error_type = 'not_japanese';
|
460 |
return FALSE;
|
461 |
}
|
462 |
}
|
463 |
// 日本語文字列チェック抜けたらキーワードチェックを行う
|
464 |
+
if ( $tsa_ng_keywords != '' ) {
|
465 |
+
$keyword_list = mb_split( ',', $tsa_ng_keywords );
|
466 |
foreach ( $keyword_list as $key ) {
|
467 |
+
if ( preg_match('/'.trim( $key ).'/u', $author.$comment) ) {
|
468 |
+
$error_type = 'ng_word';
|
469 |
return FALSE;
|
470 |
}
|
471 |
}
|
472 |
}
|
473 |
// キーワードチェック(ブラックリスト)を抜けたら必須キーワードチェックを行う
|
474 |
+
if ( $tsa_must_keywords != '' ) {
|
475 |
+
$keyword_list = mb_split( ',', $tsa_must_keywords );
|
476 |
foreach ( $keyword_list as $key ) {
|
477 |
+
if ( preg_match( '/'.trim( $key ).'/u', $author.$comment ) ) {
|
478 |
// OK
|
479 |
} else {
|
480 |
// 必須ワードがなかったためエラー
|
481 |
+
$error_type = 'must_word';
|
482 |
return FALSE;
|
483 |
}
|
484 |
}
|
485 |
}
|
486 |
// 含有URL数チェック
|
487 |
+
if ( $tsa_url_count_check != '2' ) {
|
488 |
if ( substr_count( strtolower( $author.$comment ), 'http') > $tsa_ok_url_count) {
|
489 |
// URL文字列(httpの数)が多いエラー
|
490 |
+
$error_type = 'url_count_over';
|
491 |
return FALSE;
|
492 |
}
|
493 |
}
|
504 |
* Callback admin_menu
|
505 |
*/
|
506 |
function admin_menu() {
|
507 |
+
$mincap = 'level_8';
|
508 |
+
$spam_mincap = 'level_7';
|
509 |
if (function_exists('add_menu_page')) {
|
510 |
+
add_menu_page(__('Throws SPAM Away', 'throws-spam-away'), __('Throws SPAM Away', 'throws-spam-away'), $mincap, 'throws-spam-away', array( $this, 'options_page'));
|
511 |
}
|
512 |
|
513 |
+
if (function_exists('add_submenu_page')) {
|
514 |
+
if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
|
515 |
+
add_submenu_page( 'throws-spam-away', __( 'スパムデータ', 'throws-spam-away' ), __( 'スパムデータ', 'throws-spam-away' ), $spam_mincap, 'throws-spam-away/throws_spam_away.class.php', array( $this, 'spams_list' ) );
|
516 |
}
|
517 |
+
// add_submenu_page( 'throws-spam-away', __( 'おすすめ設定', 'throws-spam-away' ), __( 'おすすめ設定', 'throws-spam_away' ), $mincap, 'throws-spam-away/throws_spam_away.class.php', array( $this, 'recommend_setting' ) );
|
518 |
}
|
519 |
// 従来通りスパムデータ保存しない場合はスルーする
|
520 |
if ( get_option( 'tsa_spam_data_save' ) != 1 ) {
|
521 |
// N/A
|
522 |
} else {
|
523 |
// プラグインアップデート時もチェックするため常に・・・
|
524 |
+
$this->tsa_create_tbl();
|
525 |
}
|
526 |
|
527 |
}
|
531 |
*/
|
532 |
function options_page() {
|
533 |
global $wpdb; // WordPress DBアクセス
|
534 |
+
global $default_on_flg;
|
535 |
global $default_dummy_param_field_flg;
|
536 |
global $default_japanese_string_min_count;
|
537 |
global $default_caution_msg;
|
540 |
global $default_error_msg;
|
541 |
global $default_ng_key_error_msg;
|
542 |
global $default_must_key_error_msg;
|
543 |
+
global $default_tb_on_flg;
|
544 |
+
global $default_tb_url_flg;
|
545 |
global $default_block_ip_address_error_msg;
|
546 |
+
global $default_ip_block_from_spam_chk_flg;
|
547 |
+
global $default_spam_data_save;
|
548 |
global $default_url_count_over_error_msg;
|
549 |
global $default_ok_url_count;
|
550 |
+
global $default_spam_champuru_flg;
|
551 |
|
552 |
+
global $default_spam_limit_flg;
|
553 |
global $default_spam_limit_minutes;
|
554 |
global $default_spam_limit_count;
|
555 |
global $default_spam_limit_over_interval;
|
556 |
global $default_spam_limit_over_interval_error_msg;
|
557 |
|
558 |
+
global $default_spam_data_delete_flg;
|
559 |
global $default_spam_display_day_count;
|
|
|
560 |
global $default_spam_keep_day_count;
|
561 |
|
562 |
// 設定完了の場合はメッセージ表示
|
563 |
$_saved = FALSE;
|
564 |
+
if ( esc_attr( $_GET['settings-updated'] ) == 'true' ) {
|
565 |
$_saved = TRUE;
|
566 |
}
|
567 |
?>
|
576 |
</style>
|
577 |
<script type="text/Javascript">
|
578 |
// 配列重複チェック
|
579 |
+
var isDuplicate = function( ary, str ) {
|
580 |
+
for ( i = 0; i < ary.length; i++ ) {
|
581 |
+
if ( str == ary[i] ) {
|
582 |
+
return true;
|
583 |
+
}
|
584 |
+
}
|
585 |
+
return false;
|
586 |
};
|
587 |
function addIpAddresses(newAddressStr) {
|
588 |
// チェック用配列
|
589 |
var test_newAddress_list = newAddressStr.split(",");
|
590 |
+
var str = document.getElementById('tsa_block_ip_addresses').value;
|
591 |
// 現在の配列(テスト用)
|
592 |
+
str = str.replace(/\,/g, "\n");
|
593 |
var test_oldAddress_list = str.split("\n");
|
594 |
|
595 |
+
if (str.length > 0) { str += "\n"; }
|
596 |
+
if (newAddressStr.length > 0) {
|
597 |
+
newAddressStr = newAddressStr.replace(/\,/g, "\n");
|
598 |
+
}
|
599 |
+
str += newAddressStr;
|
600 |
+
str = str.replace(/\,/g, "\n");
|
601 |
+
|
602 |
+
var ary = str.split("\n");
|
603 |
+
var newAry = new Array;
|
604 |
+
var ret = "";
|
605 |
+
|
606 |
+
upd_flg = false;
|
607 |
+
upd_ip_str = "";
|
608 |
+
for ( var i=0; i < test_newAddress_list.length; i++) {
|
609 |
+
if (!isDuplicate(test_oldAddress_list, test_newAddress_list[i]) && test_newAddress_list[i] != "") {
|
610 |
+
upd_flg = true;
|
611 |
+
upd_ip_str = upd_ip_str + "・"+test_newAddress_list[i]+"\n";
|
612 |
+
}
|
613 |
+
}
|
614 |
+
if ( upd_flg == true ) {
|
615 |
+
|
616 |
+
for ( var i=0 ; i < ary.length ; i++ ) {
|
617 |
+
if ( ! isDuplicate( newAry, ary[i] ) && ary[i] != "" ){
|
618 |
+
newAry.push(ary[i]);
|
619 |
+
}
|
620 |
+
}
|
621 |
+
document.getElementById( 'tsa_block_ip_addresses' ).value = newAry.join( '\n' );
|
622 |
+
alert('新たにIPアドレスを追加しました。\n'+upd_ip_str);
|
623 |
+
} else {
|
624 |
+
alert('指定されたIPアドレスは\nすでに追加されています。');
|
625 |
+
}
|
626 |
return false;
|
627 |
}
|
628 |
</script>
|
629 |
<div class="wrap">
|
630 |
<h2>Throws SPAM Away設定</h2>
|
631 |
+
<?php if ( $_saved ) { ?>
|
632 |
<div class="updated" style="padding: 10px; width: 50%;" id="message">設定の更新が完了しました。</div>
|
633 |
<?php } ?>
|
634 |
<form method="post" action="options.php">
|
635 |
<h3>スパム対策機能 設定</h3>
|
636 |
+
<?php wp_nonce_field( 'update-options' ); ?>
|
637 |
<table class="form-table">
|
638 |
<tr valign="top">
|
639 |
<th scope="row">人の目には見えないダミーの入力項目を作成し、そこに入力があれば無視対象とする<br />(スパムプログラム投稿に有効です)</th>
|
640 |
<td><?php
|
641 |
+
$chk_1 = '';
|
642 |
+
$chk_2 = '';
|
643 |
+
if ( get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg ) == '2' ) {
|
644 |
+
$chk_2 = ' checked="checked"';
|
645 |
} else {
|
646 |
+
$chk_1 = ' checked="checked"';
|
647 |
}
|
648 |
?>
|
649 |
+
<label><input type="radio" name="tsa_dummy_param_field_flg" value="1"<?php esc_attr_e( $chk_1 ); ?> /> する</label>
|
650 |
+
<label><input type="radio" name="tsa_dummy_param_field_flg" value="2"<?php esc_attr_e( $chk_2 ); ?> /> しない</label><br />
|
651 |
+
※ダミー項目の制御にJavaScriptを使用しますのでJavaScriptが動作しない環境からの投稿はスパム判定されてしまいます。ご注意の上、ご利用ください。<br />
|
652 |
+
(初期設定:<?php echo ( $default_dummy_param_field_flg == '2' ? "しない" : "する" ); ?>)
|
653 |
</td>
|
654 |
</tr>
|
655 |
<tr valign="top"><td colspan="2"><hr/></td></tr>
|
656 |
<tr valign="top">
|
657 |
<th scope="row">日本語が存在しない場合、無視対象とする<br />(日本語文字列が存在しない場合無視対象となります。)</th>
|
658 |
<td><?php
|
659 |
+
$chk_1 = '';
|
660 |
+
$chk_2 = '';
|
661 |
+
if ( get_option( 'tsa_on_flg', $default_on_flg ) == '2' ) {
|
662 |
+
$chk_2 = ' checked="checked"';
|
663 |
+
} else {
|
664 |
+
$chk_1 = ' checked="checked"';
|
665 |
+
}
|
666 |
+
?> <label><input type="radio" name="tsa_on_flg" value="1" <?php esc_attr_e( $chk_1 ); ?> /> する</label>
|
667 |
+
<label><input type="radio" name="tsa_on_flg" value="2" <?php esc_attr_e( $chk_2 );?> /> しない</label><br />
|
668 |
+
(初期設定:<?php echo ( $default_on_flg == '2' ? "しない" : "する" ); ?>)
|
669 |
</td>
|
670 |
</tr>
|
671 |
<tr valign="top">
|
672 |
<th scope="row">日本語文字列含有数<br />(この文字列に達していない場合無視対象となります。)
|
673 |
</th>
|
674 |
<td><input type="text" name="tsa_japanese_string_min_count"
|
675 |
+
value="<?php echo get_option( 'tsa_japanese_string_min_count', $default_japanese_string_min_count ); ?>" /><br />
|
676 |
+
(初期設定:<?php echo $default_japanese_string_min_count; ?>)
|
677 |
</td>
|
678 |
</tr>
|
679 |
<tr valign="top">
|
680 |
<th scope="row">元の記事に戻ってくる時間<br />(秒)※0の場合エラー画面表示しません。
|
681 |
</th>
|
682 |
<td><input type="text" name="tsa_back_second"
|
683 |
+
value="<?php echo get_option( 'tsa_back_second', $default_back_second );?>" /><br />
|
684 |
+
(初期設定:<?php echo $default_back_second; ?>)
|
685 |
</td>
|
686 |
</tr>
|
687 |
<tr valign="top">
|
688 |
<th scope="row" id="tsa_caution_message">コメント欄の下に表示される注意文言</th>
|
689 |
<td><input type="text" name="tsa_caution_message" size="80"
|
690 |
+
value="<?php echo get_option( 'tsa_caution_message', $default_caution_msg );?>" /><br />
|
691 |
+
(初期設定:<?php echo $default_caution_msg;?>)</td>
|
692 |
</tr>
|
693 |
<tr valign="top">
|
694 |
<th scope="row" id="tsa_caution_msg_point">コメント注意文言の表示位置</th>
|
695 |
<td><?php
|
696 |
+
$chk_1 = '';
|
697 |
+
$chk_2 = '';
|
698 |
+
if ( get_option( 'tsa_caution_msg_point', $default_caution_msg_point ) == '2' ) {
|
699 |
+
$chk_2 = ' checked="checked"';
|
700 |
+
} else {
|
701 |
+
$chk_1 = ' checked="checked"';
|
702 |
+
}
|
703 |
+
?> <label><input type="radio"
|
704 |
+
name="tsa_caution_msg_point" value='1' <?php esc_attr_e( $chk_1 ); ?> /> コメント送信ボタンの上</label>
|
705 |
<label><input type="radio" name="tsa_caution_msg_point" value="2"
|
706 |
+
<?php esc_attr_e( $chk_2 );?> /> コメント送信フォームの下</label><br />
|
707 |
+
(初期設定:<?php echo ( $default_caution_msg_point == '2' ? "コメント送信フォームの下" : "コメント送信ボタンの上" ); ?>)
|
708 |
</td>
|
709 |
</tr>
|
710 |
<tr><td colspan="2">※表示が崩れる場合、<a href="#tsa_caution_msg_point">「コメント注意文言の表示位置」</a>の変更 や <a href="#tsa_caution_message">「コメント欄の下に表示される注意文言」</a>を空白にすること を試してみて下さい。<br />
|
712 |
<tr valign="top">
|
713 |
<th scope="row">日本語文字列規定値未満エラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)</th>
|
714 |
<td><input type="text" name="tsa_error_message" size="80"
|
715 |
+
value="<?php echo get_option( 'tsa_error_message', $default_error_msg );?>" /><br />(初期設定:<?php echo $default_error_msg; ?>)</td>
|
716 |
</tr>
|
717 |
</table>
|
718 |
<h3>URL文字列除外 設定</h3>
|
720 |
<tr valign="top">
|
721 |
<th scope="row">URLらしき文字列が混入している場合エラーとするか</th>
|
722 |
<td><?php
|
723 |
+
$chk_1 = '';
|
724 |
+
$chk_2 = '';
|
725 |
+
if (get_option( 'tsa_url_count_on_flg', '1') == '2') {
|
726 |
+
$chk_2 = ' checked="checked"';
|
727 |
+
} else {
|
728 |
+
$chk_1 = ' checked="checked"';
|
729 |
+
}
|
730 |
+
?> <label><input type="radio"
|
731 |
+
name="tsa_url_count_on_flg" value='1' <?php esc_attr_e( $chk_1 ); ?> /> する</label>
|
732 |
<label><input type="radio" name="tsa_url_count_on_flg" value="2"
|
733 |
+
<?php esc_attr_e( $chk_2 );?> /> しない</label><br /> する場合の制限数(入力数値まで許容):<input
|
734 |
type="text" name="tsa_ok_url_count" size="2"
|
735 |
+
value="<?php echo get_option( 'tsa_ok_url_count', $default_ok_url_count);?>" /><br />
|
736 |
+
(初期設定: <?php echo $default_ok_url_count; ?>)
|
737 |
</td>
|
738 |
</tr>
|
739 |
<tr valign="top">
|
740 |
<th scope="row">URLらしき文字列混入数オーバーエラー時に表示される文言 (元の記事に戻ってくる時間の間のみ表示)</th>
|
741 |
<td><input type="text" name="tsa_url_count_over_error_message"
|
742 |
size="80"
|
743 |
+
value="<?php echo get_option( 'tsa_url_count_over_error_message', $default_url_count_over_error_msg);?>" /><br />
|
744 |
+
(初期設定:<?php echo $default_url_count_over_error_msg;?>)</td>
|
745 |
</tr>
|
746 |
</table>
|
747 |
<h3>NGキーワード / 必須キーワード 制御設定</h3>
|
750 |
<th scope="row">その他NGキーワード<br />(日本語でも英語(その他)でもNGとしたいキーワードを半角カンマ区切りで複数設定できます。<br />挙動は同じです。NGキーワードだけでも使用できます。)
|
751 |
</th>
|
752 |
<td><input type="text" name="tsa_ng_keywords" size="80"
|
753 |
+
value="<?php echo get_option( 'tsa_ng_keywords', '');?>" /></td>
|
754 |
</tr>
|
755 |
<tr valign="top">
|
756 |
<th scope="row">NGキーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
757 |
</th>
|
758 |
<td><input type="text" name="tsa_ng_key_error_message" size="80"
|
759 |
+
value="<?php echo get_option( 'tsa_ng_key_error_message', $default_ng_key_error_msg);?>" /><br />
|
760 |
+
(初期設定:<?php echo $default_ng_key_error_msg;?>)</td>
|
761 |
</tr>
|
762 |
<tr valign="top">
|
763 |
<th scope="row">その上での必須キーワード<br />(日本語でも英語(その他)でも必須としたいキーワードを半角カンマ区切りで複数設定できます。<br />指定文字列を含まない場合はエラーとなります。※複数の方が厳しくなります。<br />必須キーワードだけでも使用できます。)
|
764 |
</th>
|
765 |
<td><input type="text" name="tsa_must_keywords" size="80"
|
766 |
+
value="<?php echo get_option( 'tsa_must_keywords', '');?>" /></td>
|
767 |
</tr>
|
768 |
<tr valign="top">
|
769 |
<th scope="row">必須キーワードエラー時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
770 |
</th>
|
771 |
<td><input type="text" name="tsa_must_key_error_message" size="80"
|
772 |
+
value="<?php echo get_option( 'tsa_must_key_error_message', $default_must_key_error_msg);?>" /><br />
|
773 |
+
(初期設定:<?php echo $default_must_key_error_msg;?>)</td>
|
774 |
</tr>
|
775 |
</table>
|
776 |
<h3>トラックバックへの対応設定</h3>
|
778 |
<tr valign="top">
|
779 |
<th scope="row">上記設定をトラックバック記事にも採用する</th>
|
780 |
<td><?php
|
781 |
+
$chk_1 = '';
|
782 |
+
$chk_2 = '';
|
783 |
+
if (get_option( 'tsa_tb_on_flg', $default_tb_on_flg) == "2") {
|
784 |
+
$chk_2 = ' checked="checked"';
|
785 |
+
} else {
|
786 |
+
$chk_1 = ' checked="checked"';
|
787 |
+
}
|
788 |
+
?> <label><input type="radio" name="tsa_tb_on_flg"
|
789 |
+
value='1' <?php esc_attr_e( $chk_1 ); ?> /> する</label> <label><input
|
790 |
+
type="radio" name="tsa_tb_on_flg" value="2" <?php esc_attr_e( $chk_2 );?> /> しない</label><br />
|
791 |
+
(初期設定:<?php echo ( $default_tb_on_flg == '2' ? "しない" : "する" ); ?>)
|
792 |
</td>
|
793 |
</tr>
|
794 |
<tr valign="top">
|
795 |
+
<th scope="row">トラックバック記事にも採用する場合、ついでにこちらのURLが含まれているか判断する
|
796 |
</th>
|
797 |
<td><?php
|
798 |
+
$chk_1 = '';
|
799 |
+
$chk_2 = '';
|
800 |
+
if ( get_option( 'tsa_tb_url_flg', $default_tb_url_flg) == '2' ) {
|
801 |
+
$chk_2 = ' checked="checked"';
|
802 |
+
} else {
|
803 |
+
$chk_1 = ' checked="checked"';
|
804 |
+
}
|
805 |
+
?> <label><input type="radio" name="tsa_tb_url_flg"
|
806 |
+
value='1' <?php esc_attr_e( $chk_1 ); ?> /> する</label> <label><input
|
807 |
+
type="radio" name="tsa_tb_url_flg" value="2" <?php esc_attr_e( $chk_2 );?> /> しない</label><br />
|
808 |
+
(初期設定:<?php echo ( $default_tb_url_flg == '2' ? "しない" : "する" ); ?>)
|
809 |
</td>
|
810 |
</tr>
|
811 |
</table>
|
814 |
<tr valign="top">
|
815 |
<th scope="row">SPAMブラックリスト利用</th>
|
816 |
<td><?php
|
817 |
+
$chk = '';
|
818 |
+
if ( get_option( 'tsa_spam_champuru_flg', $default_spam_champuru_flg) == '1' ) {
|
819 |
+
$chk = ' checked="checked"';
|
820 |
}
|
821 |
?>
|
822 |
+
<label><input type="checkbox" name="tsa_spam_champuru_flg" value='1' <?php esc_attr_e( $chk ); ?> /><a href="http://spam-champuru.livedoor.com/dnsbl/">スパムちゃんぷるーDNSBL</a>に登録されているIPアドレスからのコメントを拒否する</label><br />
|
823 |
+
(初期設定:<?php echo ( $default_spam_champuru_flg == '2' ? "しない" : "する" ); ?>)
|
824 |
</td>
|
825 |
</tr>
|
826 |
<tr valign="top">
|
827 |
<th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
|
828 |
<td><?php
|
829 |
+
$chk = '';
|
830 |
+
if ( get_option( 'tsa_ip_block_from_spam_chk_flg', $default_ip_block_from_spam_chk_flg) == '1' ) {
|
831 |
+
$chk = ' checked="checked"';
|
832 |
+
}
|
833 |
+
?> <label><input type="checkbox"
|
834 |
+
name="tsa_ip_block_from_spam_chk_flg" value='1'
|
835 |
+
<?php esc_attr_e( $chk ); ?> /> スパム投稿設定したIPアドレスからの投稿も無視する</label> ※Akismet等で自動的にスパムマークされたものも含む<br />
|
836 |
+
(初期設定:<?php echo ( $default_ip_block_from_spam_chk_flg != '1' ? "しない" : "する" ); ?>)<br />
|
837 |
<?php
|
838 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
839 |
$results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
|
840 |
?>現在「spam」フラグが付いているIPアドレス:<br />
|
841 |
<blockquote>
|
842 |
<?php
|
843 |
+
$add_ip_addresses = '';
|
844 |
+
foreach ( $results as $item ) {
|
845 |
+
$spam_ip = esc_attr($item->comment_author_IP);
|
846 |
+
// ブロックしたいIP
|
847 |
+
if ( strlen( $add_ip_addresses ) > 0 ) {
|
848 |
+
$add_ip_addresses .= ',';
|
849 |
+
}
|
850 |
+
$add_ip_addresses .= $spam_ip;
|
851 |
+
?>
|
852 |
+
<b><?php esc_attr_e( $spam_ip ); ?> </b><br />
|
853 |
<?php
|
854 |
+
}
|
855 |
+
?>
|
856 |
<input type="button"
|
857 |
onclick="javascript:addIpAddresses('<?php echo $add_ip_addresses; ?>');"
|
858 |
value="これらのIPアドレスを任意のブロック対象IPアドレスにコピーする" /><br />
|
863 |
<th scope="row">任意のIPアドレスからの投稿も無視したい場合、対象となるIPアドレスを記述してください。<br />改行区切りで複数設定できます。(半角数字とスラッシュ、ドットのみ)<br />※カンマは自動的に改行に変換されます
|
864 |
</th>
|
865 |
<td><textarea name="tsa_block_ip_addresses"
|
866 |
+
id="tsa_block_ip_addresses" cols="80" rows="10"><?php echo get_option( 'tsa_block_ip_addresses', '' );?></textarea></td>
|
867 |
</tr>
|
868 |
<tr valign="top">
|
869 |
<th scope="row">ブロック対象のIPアドレスからの投稿時に表示される文言<br />(元の記事に戻ってくる時間の間のみ表示)
|
870 |
</th>
|
871 |
<td><input type="text" name="tsa_block_ip_address_error_message"
|
872 |
size="80"
|
873 |
+
value="<?php echo get_option( 'tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
|
874 |
</tr>
|
875 |
<tr style="background-color: #fefefe;"><td colspan="2">※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
|
876 |
<tr style="background-color: #fefefe;" valign="top">
|
878 |
<td>
|
879 |
※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)
|
880 |
<textarea name="tsa_white_ip_addresses"
|
881 |
+
id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option( 'tsa_white_ip_addresses', '' );?></textarea>
|
882 |
</td>
|
883 |
</tr>
|
884 |
|
888 |
<table class="form-table">
|
889 |
<tr valign="top">
|
890 |
<td>
|
891 |
+
<textarea name="tsa_memo" style="width: 80%;" rows="10"><?php echo get_option( 'tsa_memo', '' ); ?></textarea>
|
892 |
|
893 |
</td>
|
894 |
</tr>
|
898 |
<tr valign="top">
|
899 |
<th scope="row">スパムコメント投稿情報を保存しますか?</th>
|
900 |
<td><?php
|
901 |
+
$chk = '';
|
902 |
+
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save) == '1' ) {
|
903 |
+
$chk = ' checked="checked"';
|
904 |
+
}
|
905 |
+
?> <label><input type="checkbox"
|
906 |
+
name="tsa_spam_data_save" value='1' <?php esc_attr_e( $chk ); ?> /> スパムコメント情報を保存する</label><br />※Throws
|
907 |
+
SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので<?php echo get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>日以内の取得データは表示されます。<br />
|
908 |
+
(初期設定:<?php echo ( $default_spam_data_save != '1' ? "しない" : "する" ); ?>)
|
909 |
</td>
|
910 |
</tr>
|
911 |
<tr>
|
913 |
<td>
|
914 |
<input
|
915 |
type="text" name="tsa_spam_keep_day_count" size="3"
|
916 |
+
value="<?php echo get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>" />日分(最低7日)(初期設定: <?php echo $default_spam_keep_day_count; ?>)<br />
|
917 |
<?php
|
918 |
+
$chk = '';
|
919 |
+
if ( get_option( 'tsa_spam_data_delete_flg', $default_spam_data_delete_flg) == '1' ) {
|
920 |
+
$chk = ' checked="checked"';
|
921 |
}
|
922 |
?>
|
923 |
+
<label><input type="checkbox" name="tsa_spam_data_delete_flg" value='1'
|
924 |
+
<?php esc_attr_e( $chk ); ?> /> 期間が過ぎたデータを削除する</label><br />
|
925 |
※一度消したデータは復活出来ませんのでご注意ください。また最低7日分は保存されます。
|
926 |
</td>
|
927 |
</tr>
|
933 |
<tr>
|
934 |
<th scope="row">機能設定</th>
|
935 |
<td><?php
|
936 |
+
$chk = '';
|
937 |
+
if ( get_option( 'tsa_spam_limit_flg', $default_spam_limit_flg) == '1' ) {
|
938 |
+
$chk = ' checked="checked"';
|
939 |
}
|
940 |
+
?> <label><input type="checkbox" name="tsa_spam_limit_flg" value='1'
|
941 |
+
<?php esc_attr_e( $chk ); ?> /> 機能させる</label> (初期設定: <?php echo ( $default_spam_limit_flg != '1' ? "しない" : "する" ); ?>)<br /> 一定時間:<input
|
942 |
type="text" name="tsa_spam_limit_minutes" size="3"
|
943 |
+
value="<?php echo get_option( 'tsa_spam_limit_minutes', $default_spam_limit_minutes); ?>" />分以内に
|
944 |
一定回数:<input type="text" name="tsa_spam_limit_count" size="3"
|
945 |
+
value="<?php echo get_option( 'tsa_spam_limit_count', $default_spam_limit_count); ?>" />回スパムとなったら<b>次から</b>
|
946 |
一定時間:<input type="text" name="tsa_spam_limit_over_interval" size="3"
|
947 |
+
value="<?php echo get_option( 'tsa_spam_limit_over_interval', $default_spam_limit_over_interval); ?>" />分間<br />
|
948 |
+
(初期設定:一定時間「<?php echo $default_spam_limit_minutes; ?>」分以内に一定回数「<?php echo $default_spam_limit_count; ?>」回スパムとなったら次から「<?php echo $default_spam_limit_over_interval; ?>」分間)<br />
|
949 |
当該IPアドレスからのコメントを強制スパム扱いします。<br /> エラーメッセージは:<input type="text"
|
950 |
name="tsa_spam_limit_over_interval_error_message" size="80"
|
951 |
+
value="<?php echo get_option( 'tsa_spam_limit_over_interval_error_message', $default_spam_limit_over_interval_error_msg); ?>" /><br />
|
952 |
(初期設定:<?php echo $default_spam_limit_over_interval_error_msg; ?>)
|
953 |
</td>
|
954 |
</tr>
|
966 |
<?php
|
967 |
}
|
968 |
|
969 |
+
function trackback_spam_away( $tb ) {
|
970 |
+
global $newThrowsSpamAway;
|
971 |
+
|
972 |
+
$tsa_tb_on_flg = get_option( 'tsa_tb_on_flg' );
|
973 |
+
$tsa_tb_url_flg = get_option( 'tsa_tb_url_flg' );
|
974 |
+
$siteurl = get_option( 'siteurl');
|
975 |
+
// トラックバック OR ピンバック時にフィルタ発動
|
976 |
+
if ( $tsa_tb_on_flg == "2" || ( $tb['comment_type'] != 'trackback' && $tb['comment_type'] != 'pingback' ) ) return $tb;
|
977 |
+
|
978 |
+
// SPAMかどうかフラグ
|
979 |
+
$tb_val['is_spam'] = FALSE;
|
980 |
+
|
981 |
+
// コメント判定
|
982 |
+
$author = $tb["comment_author"];
|
983 |
+
$comment = $tb["comment_content"];
|
984 |
+
$post_id = $tb["comment_post_ID"];
|
985 |
+
// IP系の検査
|
986 |
+
$ip = $_SERVER['REMOTE_ADDR'];
|
987 |
+
if ( ! $newThrowsSpamAway->ip_check( $ip ) ) {
|
988 |
+
$tb_val['is_spam'] = TRUE;
|
989 |
+
} else
|
990 |
+
// 検査します!
|
991 |
+
if ( ! $newThrowsSpamAway->validation( $comment, $author ) ) {
|
992 |
+
$tb_val['is_spam'] = TRUE;
|
993 |
+
} else
|
994 |
+
// URL検索する場合、URL包含検査 (このブログのURLを含んでない場合エラー
|
995 |
+
if ( $tsa_tb_url_flg == '1' && stripos( $comment, $siteurl ) == FALSE ) {
|
996 |
+
$tb_val['is_spam'] = TRUE; // スパム扱い
|
997 |
+
}
|
998 |
+
// トラックバックスパムがなければ返却・あったら捨てちゃう
|
999 |
+
if ( ! $tb_val['is_spam'] ) {
|
1000 |
+
// トラックバック内に日本語存在(または禁止語句混入なし)
|
1001 |
+
return $tb;
|
1002 |
+
} else {
|
1003 |
+
if ( get_option( 'tsa_spam_data_save', $default_spam_data_save ) == '1' ) {
|
1004 |
$spam_contents = array();
|
1005 |
+
$spam_contents['error_type'] = 'spam_trackback';
|
1006 |
+
$spam_contents['author'] = mb_strcut( strip_tags( $author ), 0, 255 );
|
1007 |
+
$spam_contents['comment'] = mb_strcut( strip_tags( $comment ), 0, 255 );
|
1008 |
|
1009 |
$this->save_post_meta( $post_id, $ip, $spam_contents );
|
1010 |
}
|
1011 |
+
die( 'Your Trackback Throws Away.' );
|
1012 |
+
}
|
1013 |
+
}
|
1014 |
+
|
1015 |
+
/**
|
1016 |
+
* 当該IPアドレスからの最終投稿日時取得
|
1017 |
+
* @param string ip_address
|
1018 |
+
* @return 最終投稿日時 Y-m-d H:i:s
|
1019 |
+
*/
|
1020 |
+
function get_last_spam_comment( $ip_address = NULL ) {
|
1021 |
global $wpdb;
|
1022 |
// IPアドレスがなければNULL返却
|
1023 |
if ( $ip_address == NULL ) {
|
1024 |
return NULL;
|
1025 |
}
|
1026 |
// 最終コメント情報取得
|
1027 |
+
$qry_str = "SELECT post_date, post_id FROM $this->table_name WHERE ip_address = '".htmlspecialchars( $ip_address )."' ORDER BY post_date DESC LIMIT 1 ";
|
1028 |
+
$results = $wpdb->get_results( $qry_str );
|
1029 |
if ( count( $results ) > 0 ) {
|
1030 |
return $results[0];
|
1031 |
}
|
1040 |
function spams_list() {
|
1041 |
global $wpdb;
|
1042 |
$_saved = FALSE;
|
1043 |
+
|
1044 |
+
// ブラックIPリスト
|
1045 |
+
$block_ip_addresses_str = get_option( 'tsa_block_ip_addresses', '');
|
1046 |
+
$block_ip_addresses = str_replace("\n", ",", $block_ip_addresses_str);
|
1047 |
+
$ip_list = mb_split( ",", $block_ip_addresses );
|
1048 |
+
|
1049 |
// スパム情報から 特定IPアドレス削除
|
1050 |
if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
|
1051 |
+
$remove_ip_address = @htmlspecialchars( $_POST['ip_address'] );
|
1052 |
+
if ( !isset( $remove_ip_address ) || strlen( $remove_ip_address ) == 0 ) {
|
1053 |
// N/A
|
1054 |
} else {
|
1055 |
// スパムデータベースから特定IP情報削除
|
1060 |
$message = "スパムデータから $remove_ip_address のデータを削除しました。";
|
1061 |
}
|
1062 |
} elseif ( $_POST['act'] != NULL && $_POST['act'] == "add_ip" ) {
|
1063 |
+
$add_ip_address = @htmlspecialchars( $_POST['ip_address'] );
|
1064 |
+
if ( ! isset( $add_ip_address ) || strlen( $add_ip_address ) == 0 ) {
|
1065 |
// N/A
|
1066 |
} else {
|
1067 |
// 対象IPアドレスに一つ追加
|
|
|
|
|
|
|
1068 |
$dup_flg = FALSE;
|
1069 |
foreach ( $ip_list as $ip ) {
|
1070 |
if ( $ip == trim($add_ip_address) ) {
|
1082 |
}
|
1083 |
}
|
1084 |
}
|
1085 |
+
|
1086 |
+
// ブラックIPリスト もう一度取得
|
1087 |
+
$block_ip_addresses_str = get_option( 'tsa_block_ip_addresses', '' );
|
1088 |
+
$block_ip_addresses = str_replace( "\n", ',', $block_ip_addresses_str );
|
1089 |
+
$ip_list = mb_split( ",", $block_ip_addresses );
|
1090 |
+
|
1091 |
+
if ( $_GET['settings-updated'] == 'true' ) {
|
1092 |
$_saved = TRUE;
|
1093 |
}
|
1094 |
?>
|
1095 |
<div class="wrap">
|
1096 |
<?php
|
1097 |
+
if ( get_option( 'tsa_spam_data_save' ) == '1' ) {
|
1098 |
// 日数
|
1099 |
$gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
|
1100 |
if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
|
1104 |
?>
|
1105 |
<h2>Throws SPAM Away スパムデータ</h2>
|
1106 |
<h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
|
1107 |
+
<?php if ( $_saved ) { ?>
|
1108 |
+
<div class="updated" style="padding: 10px; width: 50%;" id="message"><?php esc_attr_e( $message ); ?></div>
|
1109 |
<?php } ?>
|
1110 |
<div style="background-color: #efefef;">
|
1111 |
<table style="width: 100%; border: none;">
|
1114 |
$total_qry = "
|
1115 |
SELECT count(ppd) as pageview, ppd
|
1116 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as A
|
1117 |
+
GROUP BY ppd HAVING ppd >= '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
|
1118 |
ORDER BY pageview DESC
|
1119 |
LIMIT 1
|
1120 |
";
|
1121 |
+
$qry = $wpdb->get_row( $total_qry );
|
1122 |
+
$maxxday = $qry->pageview;
|
1123 |
|
1124 |
$total_vis = "
|
1125 |
SELECT count(distinct ip_address) as vis, ppd
|
1128 |
ORDER BY vis DESC
|
1129 |
LIMIT 1
|
1130 |
";
|
1131 |
+
$qry_vis = $wpdb->get_row( $total_vis );
|
1132 |
$maxxday += $qry_vis->vis;
|
1133 |
|
1134 |
if ( $maxxday == 0 ) {
|
1142 |
$visitor_qry = "
|
1143 |
SELECT count(DISTINCT ip_address) AS total
|
1144 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as B
|
1145 |
+
WHERE ppd = '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg )."'
|
1146 |
";
|
1147 |
+
$qry_visitors = $wpdb->get_row( $visitor_qry );
|
1148 |
+
$px_visitors = round( $qry_visitors->total * 100 / $maxxday );
|
1149 |
// TOTAL
|
1150 |
$pageview_qry = "
|
1151 |
SELECT count(ppd) as total
|
1152 |
FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as C
|
1153 |
+
WHERE ppd = '".gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gg )."'
|
1154 |
";
|
1155 |
+
$qry_pageviews = $wpdb->get_row( $pageview_qry );
|
1156 |
+
$px_pageviews = round( $qry_pageviews->total * 100 / $maxxday );
|
1157 |
$px_white = 100 - $px_pageviews - $px_visitors;
|
1158 |
+
if ( $px_white < 0 ) {
|
1159 |
+
$px_white = 0;
|
1160 |
+
}
|
1161 |
|
1162 |
+
print '<td width="'.$gd.'" valign="bottom"';
|
1163 |
+
if ( $start_of_week == gmdate( 'w', current_time( 'timestamp' ) - 86400 * $gg ) ) {
|
1164 |
+
print ' style="border-left:2px dotted gray;"';
|
1165 |
+
} # week-cut
|
1166 |
+
print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;text-align:center;border-right:1px solid white;color:black;'>
|
1167 |
<div style='background:#ffffff;width:100%;height:".$px_white."px;'></div>
|
1168 |
<div style='background:$unique_color;width:100%;height:".$px_visitors."px;' title='".$qry_visitors->total." ip_addresses'></div>
|
1169 |
<div style='background:$web_color;width:100%;height:".$px_pageviews."px;' title='".$qry_pageviews->total." spam comments'></div>
|
1170 |
<div style='background:gray;width:100%;height:1px;'></div>
|
1171 |
+
<br />".gmdate( 'd', current_time( 'timestamp' ) - 86400 * $gg ) . '<br />' . gmdate( 'M', current_time( 'timestamp' ) - 86400 * $gg ) ."
|
1172 |
<div style='background:$ffffff;width:100%;height:2.2em;'>".$qry_visitors->total."<br />".$qry_pageviews->total."</div>
|
1173 |
<br clear=\"all\" /></div>
|
1174 |
</td>\n";
|
1175 |
+
} ?>
|
|
|
1176 |
</tr>
|
1177 |
</table>
|
1178 |
</div>
|
1197 |
<p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
|
1198 |
<p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
|
1199 |
<?php if ( count( $results ) > 0 ) {
|
1200 |
+
$p_url = WP_PLUGIN_URL.'/'.str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
|
1201 |
+
wp_enqueue_script( 'jquery.tablesorter', $p_url.'js/jquery.tablesorter.min.js', array( 'jquery' ), FALSE );
|
1202 |
+
wp_enqueue_style( 'jquery.tablesorter', $p_url.'images/style.css' );
|
1203 |
+
wp_enqueue_script( 'jquery.tipTip', $p_url.'js/jquery.tipTip.js', array( 'jquery' ), FALSE );
|
1204 |
+
wp_enqueue_style( 'jquery.tipTip', $p_url.'css/tipTip.css' );
|
1205 |
?>
|
1206 |
<style type="text/css">
|
1207 |
<!--
|
1340 |
|
1341 |
.cols0 { width: 200px; }
|
1342 |
.cols1 { width: 50px; }
|
1343 |
+
.cols2 { width: 130px; }
|
1344 |
+
.cols3 { width: 300px; }
|
1345 |
+
.cols4 { width: 220px; }
|
1346 |
|
1347 |
-->
|
1348 |
</style>
|
1360 |
});
|
1361 |
// tipTip
|
1362 |
jQuery(".tip").tipTip({
|
1363 |
+
activation: "hover", // hover か focus か click で起動
|
1364 |
+
keepAlive: "true", // true か false true だとずっと出ている。
|
1365 |
+
maxWidth: "auto", //ツールチップ最大幅
|
1366 |
+
edgeOffset: 10, //要素からのオフセット距離
|
1367 |
+
defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
|
1368 |
+
fadeIn: 300, // フェードインのスピード
|
1369 |
+
fadeOut: 500 // フェードアウトのスピード
|
1370 |
});
|
1371 |
jQuery(".tip_click").tipTip({
|
1372 |
+
activation: "click", // hover か focus か click で起動
|
1373 |
+
keepAlive: "true", // true か false true だとずっと出ている。
|
1374 |
+
maxWidth: "auto", //ツールチップ最大幅
|
1375 |
+
edgeOffset: 10, //要素からのオフセット距離
|
1376 |
+
defaultPosition: "left", // デフォルト表示位置 bottom(default) か top か left か right
|
1377 |
+
fadeIn: 300, // フェードインのスピード
|
1378 |
+
fadeOut: 500 // フェードアウトのスピード
|
1379 |
});
|
1380 |
|
1381 |
});
|
1418 |
</tr>
|
1419 |
</thead>
|
1420 |
<tbody>
|
1421 |
+
<?php
|
1422 |
+
foreach ( $results as $item ) {
|
1423 |
$spam_ip = $item->ip_address;
|
1424 |
$spam_cnt = $item->cnt;
|
1425 |
$last_post_date = $item->post_date;
|
1426 |
$spam_error_type = $item->error_type;
|
1427 |
+
$spam_author = strip_tags( $item->author );
|
1428 |
+
$spam_comment = strip_tags( $item->comment );
|
1429 |
|
1430 |
// エラー変換
|
1431 |
$spam_error_type_str = $spam_error_type;
|
1432 |
+
switch ( $spam_error_type ) {
|
1433 |
+
case 'not_japanese':
|
1434 |
+
$spam_error_type_str = '日本語以外';
|
1435 |
break;
|
1436 |
+
case 'must_word':
|
1437 |
+
$spam_error_type_str = '必須キーワード無し';
|
1438 |
break;
|
1439 |
+
case 'ng_word':
|
1440 |
+
$spam_error_type_str = 'NGキーワード混入';
|
1441 |
break;
|
1442 |
+
case 'block_ip':
|
1443 |
+
$spam_error_type_str = 'ブロック対象IPアドレス';
|
1444 |
break;
|
1445 |
+
case 'spam_trackback':
|
1446 |
+
$spam_error_type_str = 'トラックバックスパム';
|
1447 |
break;
|
1448 |
+
case 'url_count_over':
|
1449 |
+
$spam_error_type_str = 'URL文字列混入数オーバー';
|
1450 |
break;
|
1451 |
+
case 'spam_limit_over':
|
1452 |
+
$spam_error_type_str = '一定時間スパム判定エラー';
|
1453 |
break;
|
1454 |
+
case 'dummy_param_field':
|
1455 |
+
$spam_error_type_str = 'ダミー項目エラー';
|
1456 |
break;
|
1457 |
}
|
1458 |
+
?>
|
1459 |
<tr>
|
1460 |
<td>
|
1461 |
<b><a href="javascript:void(0);"
|
1462 |
+
onclick="window.open('<?php echo esc_attr( $p_url ); ?>hostbyip.php?ip=<?php esc_attr_e( $spam_ip ); ?>', 'hostbyip', 'width=350,height=300,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php esc_attr_e( $spam_ip ); ?>
|
1463 |
</a></b><br clear="all" />
|
1464 |
<input type="button"
|
1465 |
+
onclick="javascript:removeIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
|
1466 |
value="スパムデータから削除する" />
|
1467 |
</td>
|
1468 |
+
<td><?php esc_attr_e( $spam_cnt ); ?>回</td>
|
1469 |
+
<td><?php esc_attr_e( $last_post_date ); ?></td>
|
1470 |
+
<td>
|
1471 |
+
<?php if ( ! in_array( $spam_ip, $ip_list ) ) { ?>
|
1472 |
+
<input type="button"
|
1473 |
+
onclick="javascript:addIpAddressOnData('<?php esc_attr_e( $spam_ip ); ?>');"
|
1474 |
+
value="ブロック対象IPアドレス追加[<?php esc_attr_e( $spam_ip ); ?>]" />
|
1475 |
+
<?php } else { ?>
|
1476 |
+
ブロック対象IP
|
1477 |
+
<?php } ?>
|
1478 |
+
</td>
|
1479 |
+
<td><?php esc_attr_e( $spam_error_type_str ); ?><?php if ( $spam_author != NULL && $spam_comment != NULL ) {
|
1480 |
+
?>
|
1481 |
+
<a href="javascript:void(0);" id="<?php esc_attr_e( $spam_ip ); ?>" class="tip tip_click" title="名前:<?php echo esc_attr( $spam_author ).'<br />'; ?> 内容:<?php esc_attr_e( $spam_comment ); ?>">●</a><?php
|
1482 |
+
} ?>
|
1483 |
</td>
|
1484 |
</tr>
|
1485 |
<?php
|
1503 |
<input type="hidden" name="act" value="add_ip" />
|
1504 |
</form>
|
1505 |
<p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
|
1506 |
+
</div>
|
1507 |
+
<br clear="all" />
|
1508 |
+
<?php
|
1509 |
+
}
|
1510 |
|
1511 |
+
/**
|
1512 |
+
* おすすめ設定ページ
|
1513 |
+
*/
|
1514 |
+
function recommend_setting() {
|
1515 |
+
global $wpdb;
|
1516 |
+
?>
|
1517 |
+
制作中
|
1518 |
<?php
|
1519 |
}
|
1520 |
|
throws_spam_away.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
Plugin URI: http://gti.jp/tsa/
|
5 |
Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
|
6 |
Author: 株式会社ジーティーアイ さとう たけし
|
7 |
-
Version: 2.6.
|
8 |
Author URI: http://gti.jp/
|
9 |
*/
|
10 |
require_once 'throws_spam_away.class.php';
|
@@ -15,54 +15,105 @@ require_once 'throws_spam_away.class.php';
|
|
15 |
*/
|
16 |
|
17 |
// Throws SPAM Awayバージョン
|
18 |
-
$tsa_version =
|
19 |
// スパムデータベースバージョン
|
20 |
$tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
|
21 |
|
22 |
-
/** 初期設定 */
|
23 |
// エラー種別
|
24 |
-
$error_type =
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
// ダミー項目でのスパム判定をするか
|
26 |
-
$default_dummy_param_field_flg =
|
|
|
|
|
|
|
|
|
27 |
// 日本語文字最小含有数
|
28 |
$default_japanese_string_min_count = 3;
|
|
|
|
|
|
|
|
|
29 |
// コメント欄下に表示される注意文言(初期設定)
|
30 |
$default_caution_msg = '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)';
|
31 |
-
|
32 |
-
|
|
|
33 |
|
34 |
// エラー時に表示されるエラー文言(初期設定)
|
35 |
$default_error_msg = '日本語を規定文字数以上含まない記事は投稿できませんよ。';
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
// キーワードNGエラー時に表示されるエラー文言(初期設定)
|
39 |
$default_ng_key_error_msg = 'NGキーワードが含まれているため投稿できません。';
|
|
|
40 |
// 必須キーワードが含まれないエラー文言(初期設定)
|
41 |
-
$default_must_key_error_msg =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
// ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定)
|
43 |
-
$default_block_ip_address_error_msg =
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
// ○分以内に○回スパムとなったら○分間そのIPからのコメントははじくかの設定
|
52 |
-
$default_spam_limit_flg =
|
53 |
// ※スパム情報保存していないと機能しません。
|
54 |
$default_spam_limit_minutes = 10; // 10分以内に・・・
|
55 |
$default_spam_limit_count = 2; // 2回までは許そうか。
|
56 |
$default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
|
57 |
-
$default_spam_limit_over_interval_error_msg =
|
58 |
|
59 |
-
// スパムデータ保持期間(日)
|
60 |
-
$default_spam_keep_day_count = 30;
|
61 |
-
// 最低保存期間(日)
|
62 |
-
$lower_spam_keep_day_count = 7;
|
63 |
|
64 |
-
// スパムちゃんぷるーホスト
|
65 |
-
$spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
|
66 |
|
67 |
/** オプションキー */
|
68 |
// ダミーフィールドを生成しそこに入力がある場合はエラーとするかフラグ [tsa_dummy_param_field_flg] 1:する 2:しない
|
@@ -100,21 +151,22 @@ $spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
|
|
100 |
/** プロセス */
|
101 |
$newThrowsSpamAway = new ThrowsSpamAway;
|
102 |
// トラックバックチェックフィルター
|
103 |
-
add_filter('preprocess_comment', array(&$newThrowsSpamAway, 'trackback_spam_away'), 1, 1);
|
104 |
// ダミーフィールド作成
|
105 |
-
$dummy_param_field_flg = get_option(
|
106 |
-
if (
|
107 |
-
add_action('init', array(&$newThrowsSpamAway,
|
108 |
add_action( "comment_form", array(&$newThrowsSpamAway, "comment_form_dummy_param_field" ), 9998);
|
109 |
}
|
110 |
// 注意文言表示
|
111 |
// コメントフォーム表示
|
112 |
-
$comment_disp_point =
|
113 |
-
$comment_form_action_point = get_option(
|
114 |
// フォーム内かフォーム外か判断する
|
115 |
-
if (
|
116 |
-
|
117 |
}
|
118 |
-
add_action($comment_disp_point, array(&$newThrowsSpamAway,
|
119 |
// コメントチェックフィルター
|
120 |
-
add_action('pre_comment_on_post', array(&$newThrowsSpamAway,
|
|
4 |
Plugin URI: http://gti.jp/tsa/
|
5 |
Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
|
6 |
Author: 株式会社ジーティーアイ さとう たけし
|
7 |
+
Version: 2.6.2
|
8 |
Author URI: http://gti.jp/
|
9 |
*/
|
10 |
require_once 'throws_spam_away.class.php';
|
15 |
*/
|
16 |
|
17 |
// Throws SPAM Awayバージョン
|
18 |
+
$tsa_version = '2.6.2';
|
19 |
// スパムデータベースバージョン
|
20 |
$tsa_db_version = 2.6; // 2.6からデータベース変更 [error_type]追加
|
21 |
|
|
|
22 |
// エラー種別
|
23 |
+
$error_type = '';
|
24 |
+
|
25 |
+
/** 初期設定 */
|
26 |
+
/**
|
27 |
+
* 設定値変更 2.6.2から
|
28 |
+
*/
|
29 |
+
|
30 |
// ダミー項目でのスパム判定をするか
|
31 |
+
$default_dummy_param_field_flg = '1'; // 1: する 2:しない
|
32 |
+
|
33 |
+
// 日本語が存在しない場合無視対象とするか
|
34 |
+
$default_on_flg = 1; // 1:する
|
35 |
+
|
36 |
// 日本語文字最小含有数
|
37 |
$default_japanese_string_min_count = 3;
|
38 |
+
|
39 |
+
// 無視後、元画面に戻る時間
|
40 |
+
$default_back_second = 0;
|
41 |
+
|
42 |
// コメント欄下に表示される注意文言(初期設定)
|
43 |
$default_caution_msg = '日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)';
|
44 |
+
|
45 |
+
// コメント欄下に表示する位置(初期設定)1:コメント送信ボタンの上 2:コメント送信フォームの下
|
46 |
+
$default_caution_msg_point = '1'; //1:"comment_form", 2:"comment_form_after"
|
47 |
|
48 |
// エラー時に表示されるエラー文言(初期設定)
|
49 |
$default_error_msg = '日本語を規定文字数以上含まない記事は投稿できませんよ。';
|
50 |
+
|
51 |
+
/** URL文字列除外 設定 */
|
52 |
+
// URL数の制限をするか
|
53 |
+
$default_url_count_check_flg = '1'; // 1:する
|
54 |
+
|
55 |
+
// URL数の制限数
|
56 |
+
$default_ok_url_count = 3; // 3つまで許容
|
57 |
+
|
58 |
+
// URL数制限値オーバーのエラー文言(初期設定)
|
59 |
+
$default_url_count_over_error_msg = '';
|
60 |
+
|
61 |
+
/** NGキーワード/必須キーワード 制御設定 */
|
62 |
+
|
63 |
// キーワードNGエラー時に表示されるエラー文言(初期設定)
|
64 |
$default_ng_key_error_msg = 'NGキーワードが含まれているため投稿できません。';
|
65 |
+
|
66 |
// 必須キーワードが含まれないエラー文言(初期設定)
|
67 |
+
$default_must_key_error_msg = '必須キーワードが含まれていないため投稿できません。';
|
68 |
+
|
69 |
+
/** トラックバックへの対応設定 */
|
70 |
+
|
71 |
+
// トラックバックへの対応 1: する
|
72 |
+
$default_tb_on_flg = '1';
|
73 |
+
|
74 |
+
// トラックバック記事に当サイトURLがなければ無視するか
|
75 |
+
$default_tb_url_flg = '1';
|
76 |
+
|
77 |
+
/** 投稿IPアドレスによる制御設定 */
|
78 |
+
|
79 |
+
// スパムちゃんぷるーホスト
|
80 |
+
$spam_champuru_host = 'dnsbl.spam-champuru.livedoor.com';
|
81 |
+
|
82 |
+
// すぱむちゃんぷるー利用初期設定
|
83 |
+
$default_spam_champuru_flg = '1'; // "1":する
|
84 |
+
|
85 |
+
// WordPressのcommentsテーブルで「spam」判定されたことがあるIPアドレスからの投稿を無視するか
|
86 |
+
$default_ip_block_from_spam_chk_flg = '1'; // "1":する
|
87 |
+
|
88 |
// ブロックIPアドレスからの投稿の場合に表示されるエラー文言(初期設定)
|
89 |
+
$default_block_ip_address_error_msg = '';
|
90 |
+
|
91 |
+
/** スパムデータベース */
|
92 |
+
|
93 |
+
// スパムデータベース保存するか "1":保存
|
94 |
+
$default_spam_data_save = '1';
|
95 |
+
|
96 |
+
// 期間が過ぎたデータを削除するか? "1":する
|
97 |
+
$default_spam_data_delete_flg = '1';
|
98 |
+
|
99 |
+
// スパムデータ保持期間(日)
|
100 |
+
$default_spam_keep_day_count = 30;
|
101 |
+
|
102 |
+
// 最低保存期間(日)
|
103 |
+
$lower_spam_keep_day_count = 7;
|
104 |
+
|
105 |
+
// 機能設定
|
106 |
+
$default_spam_limit_flg = '1';
|
107 |
|
108 |
// ○分以内に○回スパムとなったら○分間そのIPからのコメントははじくかの設定
|
109 |
+
$default_spam_limit_flg = 1; // 1:する Other:しない ※スパム情報保存がデフォルトではないのでこちらも基本はしない方向です。
|
110 |
// ※スパム情報保存していないと機能しません。
|
111 |
$default_spam_limit_minutes = 10; // 10分以内に・・・
|
112 |
$default_spam_limit_count = 2; // 2回までは許そうか。
|
113 |
$default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
|
114 |
+
$default_spam_limit_over_interval_error_msg = ''; // そしてその際のエラーメッセージは・・・
|
115 |
|
|
|
|
|
|
|
|
|
116 |
|
|
|
|
|
117 |
|
118 |
/** オプションキー */
|
119 |
// ダミーフィールドを生成しそこに入力がある場合はエラーとするかフラグ [tsa_dummy_param_field_flg] 1:する 2:しない
|
151 |
/** プロセス */
|
152 |
$newThrowsSpamAway = new ThrowsSpamAway;
|
153 |
// トラックバックチェックフィルター
|
154 |
+
add_filter( 'preprocess_comment', array( &$newThrowsSpamAway, 'trackback_spam_away' ), 1, 1 );
|
155 |
// ダミーフィールド作成
|
156 |
+
$dummy_param_field_flg = get_option( 'tsa_dummy_param_field_flg', $default_dummy_param_field_flg );
|
157 |
+
if ( '1' == $dummy_param_field_flg ) {
|
158 |
+
add_action( 'init', array( &$newThrowsSpamAway, 'tsa_scripts_init' ), 9997 );
|
159 |
add_action( "comment_form", array(&$newThrowsSpamAway, "comment_form_dummy_param_field" ), 9998);
|
160 |
}
|
161 |
// 注意文言表示
|
162 |
// コメントフォーム表示
|
163 |
+
$comment_disp_point = 'comment_form';
|
164 |
+
$comment_form_action_point = get_option( 'tsa_caution_msg_point', $default_caution_msg_point );
|
165 |
// フォーム内かフォーム外か判断する
|
166 |
+
if ( '2' == $comment_form_action_point ) {
|
167 |
+
$comment_disp_point = 'comment_form_after';
|
168 |
}
|
169 |
+
add_action( $comment_disp_point, array( &$newThrowsSpamAway, 'comment_form' ), 9999 );
|
170 |
// コメントチェックフィルター
|
171 |
+
add_action( 'pre_comment_on_post', array( &$newThrowsSpamAway, 'comment_post' ), 1 );
|
172 |
+
|