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.5 |
Comparing to | |
See all releases |
Code changes from version 2.4 to 2.5
- hostbyip.php +3 -2
- readme.txt +32 -5
- throws_spam_away.class.php +183 -21
- throws_spam_away.php +9 -1
hostbyip.php
CHANGED
@@ -16,8 +16,8 @@ $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 |
-
|
20 |
-
|
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#" >
|
23 |
<![endif]-->
|
@@ -56,6 +56,7 @@ Whois: <a href="http://whois.arin.net/rest/ip/<?php echo $spam_ip; ?>" target="_
|
|
56 |
<div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからの最終投稿日時</div><?php echo $last_comment_date; ?><br />
|
57 |
<div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからスパム投稿対象となったページ</div><a href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a><br />
|
58 |
<?php } ?>
|
|
|
59 |
<div style="text-align:right;"><a href="javascript:void(0);" onclick="window.close();">閉じる</a></div>
|
60 |
</div>
|
61 |
</body>
|
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->rejectSpamIP($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#" >
|
23 |
<![endif]-->
|
56 |
<div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからの最終投稿日時</div><?php echo $last_comment_date; ?><br />
|
57 |
<div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからスパム投稿対象となったページ</div><a href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a><br />
|
58 |
<?php } ?>
|
59 |
+
<h4>スパムフィルター:<?php echo ($is_spam_champuru ? "スパムちゃんぷるー存在IPアドレス" : "未検出" ); ?></h4>
|
60 |
<div style="text-align:right;"><a href="javascript:void(0);" onclick="window.close();">閉じる</a></div>
|
61 |
</div>
|
62 |
</body>
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: taman777
|
|
3 |
Donate link: http://gti.jp/
|
4 |
Tags: comments, spam
|
5 |
Requires at least: 3.1
|
6 |
-
Tested up to: 3.5.
|
7 |
-
Stable tag: 2.
|
8 |
|
9 |
コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
|
10 |
|
@@ -24,10 +24,32 @@ Stable tag: 2.4
|
|
24 |
日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
|
25 |
リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
|
26 |
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
|
30 |
-
[192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
・バージョン2.4
|
33 |
スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
|
@@ -53,6 +75,11 @@ IPアドレスの指定は「改行」区切りで複数入力できますが、
|
|
53 |
○このIPアドレスからの最終投稿日時
|
54 |
○このIPアドレスからスパム投稿を受けた記事(リンク)
|
55 |
|
|
|
|
|
|
|
|
|
|
|
56 |
・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
|
57 |
・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
|
58 |
保持データは下記の通り
|
3 |
Donate link: http://gti.jp/
|
4 |
Tags: comments, spam
|
5 |
Requires at least: 3.1
|
6 |
+
Tested up to: 3.5.2
|
7 |
+
Stable tag: 2.5
|
8 |
|
9 |
コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
|
10 |
|
24 |
日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
|
25 |
リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
|
26 |
|
27 |
+
IPアドレスによる投稿制御が出来ます。
|
28 |
+
|
29 |
+
以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
|
30 |
+
|
31 |
+
「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用してスパム判定することも可能です。
|
32 |
+
設定にてON/OFF出来ます。
|
33 |
+
|
34 |
+
「IPアドレス ホワイトリスト」があります。ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
|
35 |
+
※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
|
36 |
+
|
37 |
+
スパムデータベースでスパム投稿の増減を確認出来ます。
|
38 |
+
表示期間を設定出来ますのでお好みの周期を設定してください。
|
39 |
+
また表示期間を過ぎたデータを削除することも可能です。
|
40 |
+
テストなどでスパム投稿したIPアドレスはスパム投稿一覧よりボタンひとつで削除出来ます。
|
41 |
+
|
42 |
+
IPアドレスの指定「ブロックリスト」「ホワイトリスト」共に「改行」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
|
43 |
※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
|
44 |
+
[192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
|
45 |
+
|
46 |
+
・バージョン2.5
|
47 |
+
「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます!スパムちゃんぷるーでスパム判定する機能です。
|
48 |
+
「IPアドレス ホワイトリスト」を導入しました。ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
|
49 |
+
※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
|
50 |
+
スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
|
51 |
+
テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
|
52 |
+
スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
|
53 |
|
54 |
・バージョン2.4
|
55 |
スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
|
75 |
○このIPアドレスからの最終投稿日時
|
76 |
○このIPアドレスからスパム投稿を受けた記事(リンク)
|
77 |
|
78 |
+
このバージョンよりファイル構成が変更になり、今まで「throws_spam_away.php」にプログラムのすべてが存在しましたが、プロセスの部分を
|
79 |
+
「throws_spam_away.php」に残し、クラスの部分を「throws_spam_away.class.php」に移しました。
|
80 |
+
これにより、throws_spam_away.class.php」を外部から読込みメソッドを使用することを目論んでいます。
|
81 |
+
※まだ実験段階です。
|
82 |
+
|
83 |
・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
|
84 |
・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
|
85 |
保持データは下記の通り
|
throws_spam_away.class.php
CHANGED
@@ -9,17 +9,29 @@
|
|
9 |
class ThrowsSpamAway {
|
10 |
|
11 |
// version
|
12 |
-
var $version = '2.
|
13 |
var $table_name = "";
|
14 |
|
15 |
public function __construct($flg = FALSE) {
|
16 |
global $default_spam_data_save;
|
17 |
-
if ($flg == FALSE) {
|
18 |
-
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
19 |
-
}
|
20 |
global $wpdb;
|
21 |
// 接頭辞(wp_)を付けてテーブル名を設定
|
22 |
$this->table_name = $wpdb->prefix . 'tsa_spam';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
}
|
24 |
|
25 |
/**
|
@@ -65,6 +77,8 @@ class ThrowsSpamAway {
|
|
65 |
* @param string $ip_address
|
66 |
*/
|
67 |
function save_post_meta( $post_id, $ip_address ) {
|
|
|
|
|
68 |
if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
|
69 |
|
70 |
global $wpdb;
|
@@ -101,14 +115,38 @@ class ThrowsSpamAway {
|
|
101 |
global $default_spam_limit_over_interval_error_msg;
|
102 |
global $error_type;
|
103 |
|
|
|
104 |
if( $user_ID ) {
|
105 |
return $id;
|
106 |
}
|
107 |
// コメント(comment)及び名前(author)の中も検査
|
108 |
$author = $_POST["author"];
|
109 |
$comment = $_POST["comment"];
|
110 |
-
|
|
|
111 |
$ip = $_SERVER['REMOTE_ADDR'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
|
113 |
// アウト!
|
114 |
} else
|
@@ -157,6 +195,14 @@ class ThrowsSpamAway {
|
|
157 |
global $wpdb; // WordPress DBアクセス
|
158 |
global $newThrowsSpamAway;
|
159 |
global $error_type;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
// IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
|
161 |
$ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
|
162 |
|
@@ -197,6 +243,49 @@ class ThrowsSpamAway {
|
|
197 |
return TRUE;
|
198 |
}
|
199 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
/**
|
201 |
* CIDRチェック
|
202 |
* @param string $ip
|
@@ -392,8 +481,25 @@ class ThrowsSpamAway {
|
|
392 |
global $default_spam_limit_over_interval;
|
393 |
global $default_spam_limit_over_interval_error_msg;
|
394 |
|
|
|
|
|
|
|
|
|
395 |
// 設定完了の場合はメッセージ表示
|
396 |
$_saved = FALSE;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
397 |
if ( $_GET['settings-updated'] == "true" ) {
|
398 |
$_saved = TRUE;
|
399 |
}
|
@@ -458,6 +564,14 @@ function addIpAddresses(newAddressStr) {
|
|
458 |
}
|
459 |
return false;
|
460 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
461 |
</script>
|
462 |
<div class="wrap">
|
463 |
<h2>Throws SPAM Away設定</h2>
|
@@ -600,6 +714,17 @@ function addIpAddresses(newAddressStr) {
|
|
600 |
</table>
|
601 |
<h3>投稿IPアドレスによる制御設定</h3>
|
602 |
<table class="form-table">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
603 |
<tr valign="top">
|
604 |
<th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
|
605 |
<td><?php
|
@@ -609,7 +734,7 @@ function addIpAddresses(newAddressStr) {
|
|
609 |
}
|
610 |
?> <label><input type="checkbox"
|
611 |
name="tsa_ip_block_from_spam_chk_flg" value="1"
|
612 |
-
<?php echo $chk; ?> /> スパム投稿設定したIPアドレスからの投稿も無視する</label
|
613 |
<?php
|
614 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
615 |
$results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
|
@@ -648,6 +773,16 @@ function addIpAddresses(newAddressStr) {
|
|
648 |
size="80"
|
649 |
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>
|
650 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
651 |
</table>
|
652 |
<h3>スパムデータベース</h3>
|
653 |
<table class="form-table">
|
@@ -660,7 +795,24 @@ function addIpAddresses(newAddressStr) {
|
|
660 |
}
|
661 |
?> <label><input type="checkbox"
|
662 |
name="tsa_spam_data_save" value="1" <?php echo $chk; ?> /> スパムコメント情報を保存する</label><br />※Throws
|
663 |
-
SPAM Away設定画面表示時に時間がかかることがあります。<br
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
664 |
</td>
|
665 |
</tr>
|
666 |
<tr valign="top">
|
@@ -693,7 +845,7 @@ function addIpAddresses(newAddressStr) {
|
|
693 |
|
694 |
<input type="hidden" name="action" value="update" /> <input
|
695 |
type="hidden" name="page_options"
|
696 |
-
value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message,tsa_url_count_on_flg,tsa_ok_url_count,tsa_url_count_over_error_message,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message" />
|
697 |
<p class="submit">
|
698 |
<input type="submit" class="button-primary"
|
699 |
value="<?php _e('Save Changes') ?>" />
|
@@ -702,12 +854,13 @@ function addIpAddresses(newAddressStr) {
|
|
702 |
<?php
|
703 |
if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
|
704 |
// 日数
|
705 |
-
$gdays =
|
|
|
706 |
// 表カラー
|
707 |
$unique_color="#114477";
|
708 |
$web_color="#3377B6";
|
709 |
?>
|
710 |
-
<h3
|
711 |
<div class="clear"></div>
|
712 |
|
713 |
<div class="clear" style="background-color: #efefef;">
|
@@ -786,7 +939,7 @@ print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;te
|
|
786 |
<?php
|
787 |
// wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
|
788 |
$results = $wpdb->get_results(
|
789 |
-
"SELECT count(ip_address) as cnt,ip_address,max(ppd) as post_date FROM (select ip_address,
|
790 |
WHERE ppd >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
|
791 |
GROUP BY ip_address
|
792 |
ORDER BY cnt DESC"
|
@@ -801,6 +954,7 @@ ORDER BY cnt DESC"
|
|
801 |
※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b>「変更を保存」</b>をクリックし内容を保存してください。
|
802 |
</p>
|
803 |
<p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
|
|
|
804 |
<?php if ( count( $results ) > 0 ) {
|
805 |
$p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
|
806 |
wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
|
@@ -949,10 +1103,11 @@ jQuery(function() {
|
|
949 |
jQuery('#spam_list').tablesorter({
|
950 |
widgets: ['zebra'],
|
951 |
headers: {
|
952 |
-
0: {id:"ipAddress"},
|
953 |
-
|
954 |
-
2: { sorter: "shortDate" }
|
955 |
-
|
|
|
956 |
});
|
957 |
|
958 |
});
|
@@ -969,7 +1124,7 @@ jQuery(function() {
|
|
969 |
<tr>
|
970 |
<th class="cols0">IPアドレス</th>
|
971 |
<th class="cols1">投稿数</th>
|
972 |
-
<th class="cols2"
|
973 |
<th class="cols3">スパムIP登録</th>
|
974 |
</tr>
|
975 |
</thead>
|
@@ -983,14 +1138,17 @@ jQuery(function() {
|
|
983 |
<tr>
|
984 |
<td>
|
985 |
<b><a href="javascript:void(0);"
|
986 |
-
onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=
|
987 |
-
</a></b
|
|
|
|
|
|
|
988 |
</td>
|
989 |
<td><?php echo $spam_cnt; ?>回</td>
|
990 |
<td><?php echo $last_post_date; ?></td>
|
991 |
-
<td
|
992 |
onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
|
993 |
-
value="
|
994 |
</tr>
|
995 |
<?php
|
996 |
}
|
@@ -1003,9 +1161,12 @@ jQuery(function() {
|
|
1003 |
</div>
|
1004 |
<?php } ?>
|
1005 |
</form>
|
|
|
|
|
|
|
|
|
1006 |
<p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
|
1007 |
<div class="clear"></div>
|
1008 |
-
|
1009 |
</div>
|
1010 |
|
1011 |
<?php
|
@@ -1067,4 +1228,5 @@ jQuery(function() {
|
|
1067 |
}
|
1068 |
return NULL;
|
1069 |
}
|
|
|
1070 |
}
|
9 |
class ThrowsSpamAway {
|
10 |
|
11 |
// version
|
12 |
+
var $version = '2.5';
|
13 |
var $table_name = "";
|
14 |
|
15 |
public function __construct($flg = FALSE) {
|
16 |
global $default_spam_data_save;
|
|
|
|
|
|
|
17 |
global $wpdb;
|
18 |
// 接頭辞(wp_)を付けてテーブル名を設定
|
19 |
$this->table_name = $wpdb->prefix . 'tsa_spam';
|
20 |
+
if ($flg == FALSE) {
|
21 |
+
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
22 |
+
global $default_spam_keep_day_count;
|
23 |
+
global $lower_spam_keep_day_count;
|
24 |
+
|
25 |
+
// 保存期間終了したデータ削除
|
26 |
+
$skdc = intval( get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count) );
|
27 |
+
if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
|
28 |
+
if ( get_option('tsa_spam_data_delete_flg', "") == "1" ) {
|
29 |
+
// 期間 get_option('tsa_spam_keep_day_count') 日
|
30 |
+
$wpdb->query(
|
31 |
+
"DELETE FROM ".$this->table_name." WHERE post_date < '".gmdate('Y-m-d 23:59:59', current_time('timestamp')-86400 * $skdc)."'"
|
32 |
+
);
|
33 |
+
}
|
34 |
+
}
|
35 |
}
|
36 |
|
37 |
/**
|
77 |
* @param string $ip_address
|
78 |
*/
|
79 |
function save_post_meta( $post_id, $ip_address ) {
|
80 |
+
global $default_spam_data_save;
|
81 |
+
|
82 |
if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
|
83 |
|
84 |
global $wpdb;
|
115 |
global $default_spam_limit_over_interval_error_msg;
|
116 |
global $error_type;
|
117 |
|
118 |
+
// ログインしている場合は通過させます。
|
119 |
if( $user_ID ) {
|
120 |
return $id;
|
121 |
}
|
122 |
// コメント(comment)及び名前(author)の中も検査
|
123 |
$author = $_POST["author"];
|
124 |
$comment = $_POST["comment"];
|
125 |
+
|
126 |
+
// チェック対象IPアドレス
|
127 |
$ip = $_SERVER['REMOTE_ADDR'];
|
128 |
+
|
129 |
+
// ホワイトリスト優先通過
|
130 |
+
// IP制御 任意のIPアドレスをあればブロックする
|
131 |
+
$white_ip_addresses = get_option( 'tsa_white_ip_addresses', "" );
|
132 |
+
if ( $white_ip_addresses != NULL && $white_ip_addresses != "" ) {
|
133 |
+
// 改行区切りの場合はカンマ区切りに文字列置換後リスト化
|
134 |
+
$white_ip_addresses = str_replace("\n", ",", $white_ip_addresses);
|
135 |
+
$ip_list = mb_split( ",", $white_ip_addresses );
|
136 |
+
foreach ( $ip_list as $_ip ) {
|
137 |
+
// 指定IPが範囲指定の場合 例:192.168.1.0/24
|
138 |
+
if ( strpos( $_ip, "/" ) != FALSE ) {
|
139 |
+
if ( $this->inCIDR( $ip, $_ip ) ) {
|
140 |
+
// 通過対象
|
141 |
+
return $id;
|
142 |
+
}
|
143 |
+
} elseif ( trim( $_ip ) == trim( $ip ) ) {
|
144 |
+
// 通過対象
|
145 |
+
return $id;
|
146 |
+
}
|
147 |
+
}
|
148 |
+
}
|
149 |
+
// IP系の検査
|
150 |
if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
|
151 |
// アウト!
|
152 |
} else
|
195 |
global $wpdb; // WordPress DBアクセス
|
196 |
global $newThrowsSpamAway;
|
197 |
global $error_type;
|
198 |
+
// スパムフィルター利用あれば始めに通す
|
199 |
+
// 1.スパムちゃんぷるー
|
200 |
+
$spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg' );
|
201 |
+
if ( get_option( 'tsa_spam_champuru_flg', "" ) == "1" ) {
|
202 |
+
return $this->rejectSpamIP( $target_ip );
|
203 |
+
}
|
204 |
+
// 2.以降あれば追加
|
205 |
+
|
206 |
// IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
|
207 |
$ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
|
208 |
|
243 |
return TRUE;
|
244 |
}
|
245 |
|
246 |
+
/**
|
247 |
+
* スパムちゃんぷるー利用ブロック
|
248 |
+
*/
|
249 |
+
function rejectSpamIP( $ip ) {
|
250 |
+
global $spam_champuru_host;
|
251 |
+
|
252 |
+
$spam_IP = '127.0.0.2';
|
253 |
+
$host = $spam_champuru_host;
|
254 |
+
$pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
|
255 |
+
$check_IP = trim(preg_match($pattern, $ip) ? $ip : $_SERVER['REMOTE_ADDR']);
|
256 |
+
$spam = false;
|
257 |
+
if (preg_match($pattern, $check_IP)) {
|
258 |
+
$host = implode('.',array_reverse(split('\.',$check_IP))) . '.' . $host;
|
259 |
+
if (function_exists('dns_get_record')) {
|
260 |
+
$check_recs = dns_get_record($host, DNS_A);
|
261 |
+
if (isset($check_recs[0]['ip'])) $spam = ($check_recs[0]['ip'] === $spam_IP);
|
262 |
+
unset($check_recs);
|
263 |
+
} elseif (function_exists('gethostbyname')) {
|
264 |
+
$checked = (gethostbyname($host) === $spam_IP);
|
265 |
+
} elseif (class_exists('Net_DNS_Resolver')) {
|
266 |
+
$resolver = new Net_DNS_Resolver();
|
267 |
+
$response = $resolver->query($host, 'A');
|
268 |
+
if ($response) {
|
269 |
+
foreach ($response->answer as $rr) {
|
270 |
+
if ($rr->type === 'A') {
|
271 |
+
$spam = ($rr->address === $spam_IP);
|
272 |
+
break;
|
273 |
+
}
|
274 |
+
}
|
275 |
+
}
|
276 |
+
unset($response);
|
277 |
+
unset($resolver);
|
278 |
+
} elseif (function_exists('checkdnsrr')) {
|
279 |
+
$spam = (checkdnsrr($host, "A") === true);
|
280 |
+
}
|
281 |
+
}
|
282 |
+
if ($spam) {
|
283 |
+
$error_type = "block_ip";
|
284 |
+
return FALSE;
|
285 |
+
}
|
286 |
+
return TRUE;
|
287 |
+
}
|
288 |
+
|
289 |
/**
|
290 |
* CIDRチェック
|
291 |
* @param string $ip
|
481 |
global $default_spam_limit_over_interval;
|
482 |
global $default_spam_limit_over_interval_error_msg;
|
483 |
|
484 |
+
global $default_spam_display_day_count;
|
485 |
+
|
486 |
+
global $default_spam_keep_day_count;
|
487 |
+
|
488 |
// 設定完了の場合はメッセージ表示
|
489 |
$_saved = FALSE;
|
490 |
+
// スパム情報から 特定IPアドレス削除
|
491 |
+
if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
|
492 |
+
$remove_ip_address = @htmlspecialchars($_POST['ip_address']);
|
493 |
+
if ( !isset($remove_ip_address) || strlen($remove_ip_address) == 0 ) {
|
494 |
+
// N/A
|
495 |
+
} else {
|
496 |
+
// スパムデータベースから特定IP情報削除
|
497 |
+
$wpdb->query(
|
498 |
+
"DELETE FROM ".$this->table_name." WHERE ip_address = '".$remove_ip_address."' "
|
499 |
+
);
|
500 |
+
$_saved = TRUE;
|
501 |
+
}
|
502 |
+
}
|
503 |
if ( $_GET['settings-updated'] == "true" ) {
|
504 |
$_saved = TRUE;
|
505 |
}
|
564 |
}
|
565 |
return false;
|
566 |
}
|
567 |
+
function removeIpAddressOnData(ipAddressStr) {
|
568 |
+
if (confirm('['+ipAddressStr+'] をスパムデータベースから削除します。よろしいですか?この操作は取り消せません')) {
|
569 |
+
jQuery('#remove_ip_address').val(ipAddressStr);
|
570 |
+
jQuery('#remove').submit();
|
571 |
+
} else {
|
572 |
+
return false;
|
573 |
+
}
|
574 |
+
}
|
575 |
</script>
|
576 |
<div class="wrap">
|
577 |
<h2>Throws SPAM Away設定</h2>
|
714 |
</table>
|
715 |
<h3>投稿IPアドレスによる制御設定</h3>
|
716 |
<table class="form-table">
|
717 |
+
<tr valign="top">
|
718 |
+
<th scope="row">SPAMブラックリスト利用</th>
|
719 |
+
<td><?php
|
720 |
+
$chk = "";
|
721 |
+
if (get_option('tsa_spam_champuru_flg', "") == "1" ) {
|
722 |
+
$chk = "checked=\"checked\"";
|
723 |
+
}
|
724 |
+
?>
|
725 |
+
<label><input type="checkbox" name="tsa_spam_champuru_flg" value="1" <?php echo $chk; ?> /><a href="http://spam-champuru.livedoor.com/dnsbl/">スパムちゃんぷるーDNSBL</a>に登録されているIPアドレスからのコメントを拒否する</label>
|
726 |
+
</td>
|
727 |
+
</tr>
|
728 |
<tr valign="top">
|
729 |
<th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
|
730 |
<td><?php
|
734 |
}
|
735 |
?> <label><input type="checkbox"
|
736 |
name="tsa_ip_block_from_spam_chk_flg" value="1"
|
737 |
+
<?php echo $chk; ?> /> スパム投稿設定したIPアドレスからの投稿も無視する</label> ※Akismet等で自動的にスパムマークされたものも含む<br />
|
738 |
<?php
|
739 |
// wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
|
740 |
$results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
|
773 |
size="80"
|
774 |
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>
|
775 |
</tr>
|
776 |
+
|
777 |
+
<tr style="background-color: #efefef;"><td colspan="2"><hr />※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
|
778 |
+
<tr style="background-color: #efefef;" valign="top">
|
779 |
+
<th scope="row"><strong>IP制御免除<br />ホワイトリスト</strong><br />※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)</th>
|
780 |
+
<td>
|
781 |
+
<textarea name="tsa_white_ip_addresses"
|
782 |
+
id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_white_ip_addresses', "");?></textarea>
|
783 |
+
</td>
|
784 |
+
</tr>
|
785 |
+
|
786 |
</table>
|
787 |
<h3>スパムデータベース</h3>
|
788 |
<table class="form-table">
|
795 |
}
|
796 |
?> <label><input type="checkbox"
|
797 |
name="tsa_spam_data_save" value="1" <?php echo $chk; ?> /> スパムコメント情報を保存する</label><br />※Throws
|
798 |
+
SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>日以内の取得データは表示されます。
|
799 |
+
</td>
|
800 |
+
</tr>
|
801 |
+
<tr>
|
802 |
+
<th scope="row">スパムデータを表示する期間</th>
|
803 |
+
<td>
|
804 |
+
<input
|
805 |
+
type="text" name="tsa_spam_keep_day_count" size="3"
|
806 |
+
value="<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>" />日分(最低7日)
|
807 |
+
<?php
|
808 |
+
$chk = "";
|
809 |
+
if (get_option('tsa_spam_data_delete_flg', "") == "1") {
|
810 |
+
$chk = "checked=\"checked\"";
|
811 |
+
}
|
812 |
+
?>
|
813 |
+
<label><input type="checkbox" name="tsa_spam_data_delete_flg" value="1"
|
814 |
+
<?php echo $chk; ?> /> 期間が過ぎたデータを削除する</label><br />
|
815 |
+
※一度消したデータは復活出来ませんのでご注意ください。また最低7日分は保存されます。
|
816 |
</td>
|
817 |
</tr>
|
818 |
<tr valign="top">
|
845 |
|
846 |
<input type="hidden" name="action" value="update" /> <input
|
847 |
type="hidden" name="page_options"
|
848 |
+
value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message,tsa_url_count_on_flg,tsa_ok_url_count,tsa_url_count_over_error_message,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message,tsa_spam_champuru_flg,tsa_spam_keep_day_count,tsa_spam_data_delete_flg,tsa_white_ip_addresses" />
|
849 |
<p class="submit">
|
850 |
<input type="submit" class="button-primary"
|
851 |
value="<?php _e('Save Changes') ?>" />
|
854 |
<?php
|
855 |
if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
|
856 |
// 日数
|
857 |
+
$gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
|
858 |
+
if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
|
859 |
// 表カラー
|
860 |
$unique_color="#114477";
|
861 |
$web_color="#3377B6";
|
862 |
?>
|
863 |
+
<h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
|
864 |
<div class="clear"></div>
|
865 |
|
866 |
<div class="clear" style="background-color: #efefef;">
|
939 |
<?php
|
940 |
// wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
|
941 |
$results = $wpdb->get_results(
|
942 |
+
"SELECT count(ip_address) as cnt,ip_address,max(ppd) as post_date FROM (select ip_address, post_date as ppd from $this->table_name) as D
|
943 |
WHERE ppd >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
|
944 |
GROUP BY ip_address
|
945 |
ORDER BY cnt DESC"
|
954 |
※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b>「変更を保存」</b>をクリックし内容を保存してください。
|
955 |
</p>
|
956 |
<p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
|
957 |
+
<p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
|
958 |
<?php if ( count( $results ) > 0 ) {
|
959 |
$p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
|
960 |
wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
|
1103 |
jQuery('#spam_list').tablesorter({
|
1104 |
widgets: ['zebra'],
|
1105 |
headers: {
|
1106 |
+
0: { id: "ipAddress" },
|
1107 |
+
1: { sorter: "digit" },
|
1108 |
+
2: { sorter: "shortDate" },
|
1109 |
+
3: { sorter: false }
|
1110 |
+
}
|
1111 |
});
|
1112 |
|
1113 |
});
|
1124 |
<tr>
|
1125 |
<th class="cols0">IPアドレス</th>
|
1126 |
<th class="cols1">投稿数</th>
|
1127 |
+
<th class="cols2">最終投稿日時</th>
|
1128 |
<th class="cols3">スパムIP登録</th>
|
1129 |
</tr>
|
1130 |
</thead>
|
1138 |
<tr>
|
1139 |
<td>
|
1140 |
<b><a href="javascript:void(0);"
|
1141 |
+
onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=300,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php echo $spam_ip; ?>
|
1142 |
+
</a></b><br clear="all" />
|
1143 |
+
<input type="button"
|
1144 |
+
onclick="javascript:removeIpAddressOnData('<?php echo $spam_ip; ?>');"
|
1145 |
+
value="スパムデータから削除する" />
|
1146 |
</td>
|
1147 |
<td><?php echo $spam_cnt; ?>回</td>
|
1148 |
<td><?php echo $last_post_date; ?></td>
|
1149 |
+
<td><input type="button"
|
1150 |
onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
|
1151 |
+
value="ブロック対象IPアドレスにコピー[<?php echo $spam_ip; ?>]" /></td>
|
1152 |
</tr>
|
1153 |
<?php
|
1154 |
}
|
1161 |
</div>
|
1162 |
<?php } ?>
|
1163 |
</form>
|
1164 |
+
<form method="post" id="remove">
|
1165 |
+
<input type="hidden" name="ip_address" id="remove_ip_address" value="" />
|
1166 |
+
<input type="hidden" name="act" value="remove_ip" />
|
1167 |
+
</form>
|
1168 |
<p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
|
1169 |
<div class="clear"></div>
|
|
|
1170 |
</div>
|
1171 |
|
1172 |
<?php
|
1228 |
}
|
1229 |
return NULL;
|
1230 |
}
|
1231 |
+
|
1232 |
}
|
throws_spam_away.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
Plugin URI: http://gti.jp/tsa/
|
5 |
Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
|
6 |
Author: 株式会社ジーティーアイ さとう たけし
|
7 |
-
Version: 2.
|
8 |
Author URI: http://gti.jp/
|
9 |
*/
|
10 |
require_once 'throws_spam_away.class.php';
|
@@ -49,6 +49,14 @@ $default_spam_limit_count = 2; // 2回までは許そうか。
|
|
49 |
$default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
|
50 |
$default_spam_limit_over_interval_error_msg = ""; // そしてその際のエラーメッセージは・・・
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
/** オプションキー */
|
53 |
// 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
|
54 |
// 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
|
4 |
Plugin URI: http://gti.jp/tsa/
|
5 |
Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
|
6 |
Author: 株式会社ジーティーアイ さとう たけし
|
7 |
+
Version: 2.5
|
8 |
Author URI: http://gti.jp/
|
9 |
*/
|
10 |
require_once 'throws_spam_away.class.php';
|
49 |
$default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
|
50 |
$default_spam_limit_over_interval_error_msg = ""; // そしてその際のエラーメッセージは・・・
|
51 |
|
52 |
+
// スパムデータ保持期間(日)
|
53 |
+
$default_spam_keep_day_count = 30;
|
54 |
+
// 最低保存期間(日)
|
55 |
+
$lower_spam_keep_day_count = 7;
|
56 |
+
|
57 |
+
// スパムちゃんぷるーホスト
|
58 |
+
$spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
|
59 |
+
|
60 |
/** オプションキー */
|
61 |
// 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
|
62 |
// 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
|