apache|mysql|セキュリティ
この記事は、win2k プラットフォーム上に安全な Web サイトをセットアップしたい友人向けに書かれています。
必要なプログラム:
apache
http://www.apache.org/dist/httpd/binaries/win32/
apache_1.3.28-win32-x86-no_src.msi または apache_2.0.47-win32- x86- を選択します。 no_ssl.msi
はすべて問題ありません。下位バージョンのプログラムは使用しないでください。それらは欠陥があり、インターネット
php
http://cn2.php.net/get/php-4.3.3-Win32 で簡単に攻撃される可能性があります。 zip/from/a/mirror
php-4.3.3
mysql
http://www.mysql.com/get/Downloa... 5-win.zip/from/pick
mysql-4.0.15
メモ: これより前の Mysql バージョンには欠陥があるため、使用しないでください
ZendOptimizer-2[1].1.0a-Windows-i386.exe
php オプティマイザー、暗号化された php スクリプトをサポートします
MySQL-Front
1 回の実行 に基づく mysql マネージャー非常に使いやすいMSプラットフォームのGUI
phpMyAdmin-2.5.0-php.zip
PHPスクリプトに基づくMysqlマネージャー
phpencode.exe
php暗号化コンパイラ
install~
1 .Apacheをインストール
からインストールは非常に簡単です、パス~!、システム パーティションにインストールしないように注意してください
バックアップ、メンテナンス、災害復旧の点で利点があるため
インストールが d:\ に達したとします
2.
具体的なインストール手順については、phpディレクトリのinstall.txtを参照してください
なお、cgiメソッドは使用しないでください
以下は参考情報です
----------- -- ------------------------------------------------ -- ---
タイトル 2002/2/17
Windows 用 PHP の任意ファイル実行 (GIF、MP3)
概要
PHP.EXE を通じて、攻撃者は、拡張子が
であっても、PHP にあらゆるファイルを PHP ファイルとして解釈させることができます。これにより、リモート攻撃者が任意のコマンドを実行できるようになり、システムが侵害される可能性があります。
脆弱なシステム:
Windows 上の PHP バージョン 4.1.1
Windows 上の PHP バージョン 4.0.4
攻撃者は、無害なファイルをアップロードする可能性があります。 WebExplorer (またはアップロード機能を持つその他の PHP プログラム) などのアップロード システムを通じて、
ファイル (mp3、txt、または gif 拡張子付き) をアップロードし、PHP にその実行をリクエストします。 例:
ファイルをアップロードした後、「gif」 " 拡張子 (この例では huh.gif) には、次のような
PHP コードが含まれています:
#-----------
phpinfo();
?>
#- -- ---------
攻撃者は次のアドレスを入力して侵入し、PHP ファイルを
実行させることができます:
http://www.example.com/php/php.exe/UPLOAD_DIRECTORY /huh .gif
注意: php/php.exe が URL に含まれています。
追加情報
この情報は CompuMe および RootExtractor によって提供されています。
ps: 一部の最新バージョンではこの問題が発生します。 CGI を使用してインストールすることを覚えておいてください...
3. mysql をインストールします
これも非常に簡単で、具体的なプロセスはパスです
mysql のインストール後のデフォルト設定は本当に心配です
以下は元記事より引用
- -------------------------------------- ---------- ------------------------------
2002/12/21
前に書いた:どうすることもできない、人生が台無しになる 消耗して痛い~~~なのでこの記事はオリジナルでまとめたものではありません!
デフォルトでインストールされている mysql サービスの安全でない要因は次のとおりです:
1. mysql のデフォルトの認証テーブル
2. ロギング機能の欠如
3. my.ini ファイルからパスワードが漏洩する
4. サービスは次の方法ですべてのネットワーク インターフェイスにバインドされていますデフォルト
5. デフォルトのインストール パス下の Mysql ディレクトリのアクセス許可
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~~~~~~~~
1.mysql デフォルト認可テーブル
mysql 認証は mysql データベースに基づいているため、認可テーブルとも呼ばれます。すべての権限設定はここにあります。
最も重要なテーブルであるユーザー テーブルについてのみ説明します。接続を受け入れるか拒否するかを制御します。
最初に見てください
ホスト、ユーザー、パスワード、ユーザーからの削除を選択します
+----------+------+--------------- ------+----------+
| パスワード | - -------+-----------+
| 67457e226a1a15bd | |
|
| - --------+---------------+
新バージョンでは、インストール後にパスワードを設定するクイック設定画面が表示されます。
上記はユーザーテーブルの内容です(少し省略しています)何か問題があるでしょうか?
mysql の検証方法は 2 つの情報に基づいていることがわかります
1. そこから接続します
2. ユーザー名
最初のものは問題ありません、もちろんパスワードは安全でなければなりません。
記事 2: どのホストからでも、パスワードなしでユーザー root として接続でき、権限はすべての権限です。 (注: ここでの権限はグローバル権限です)
3 番目の記事はローカルホストからのもので、任意のユーザー名 (注: ユーザーは空白です。ユーザー名が必要ないという意味ではありません)、パスワードは不要で、接続できます。 、すべての権限
4 番目 任意のホスト、任意のユーザー名から接続でき、パスワードは必要なく、権限も必要ありません。
2、3、4 はすべて安全ではないことがわかります。これらを攻撃する方法についてはここでは説明しません。情報ライブラリを参照してください。
MySQL がローカル接続のみを許可する場合は、host の % と user の null (空を意味します) を削除します。
host='%'; から user=' から削除します。
最終的な user テーブルを参照してください。こんな感じ
+-----------+------+----------------------+---- --- ------+
| パスワード |
+----------+------+-------- -------+----------+
| 67457e226a1a15bd | --+-----------------+---------------+
最後に、認可テーブルを更新して有効にする必要がありますすぐに権限をフラッシュします。mysql をリモートで使用する必要がある場合は、% セグメントの root アカウントに安全なパスワードを追加する必要があります。user set password=password('youpass') where host='%'; を追加します。 youpass はパスワードです
mysql> select host,user,password,Delete_priv from user; --- ------+----------+
ユーザーのパスワード | --- -+------+-----------+
| 67457e226a1a15bd | % | 77c590fa148bc9fb |
+----------+------+-- --- --------+
より良い方法は、リモート ホストへの接続を特定のホストとして指定することです。
ホストの % を、接続を許可するホストに変更します。例:
192.168.0.%特定のサブネットを許可します
www.sandflee.net は特定のホストを許可します
アカウントのデフォルト名も懸念事項です。ブルートフォースクラッキングにつながる可能性があります
update user set user='localadmin' where host='localhost';
update user set user='remoteadmin' where host='%';
最終的なユーザーテーブルは次のようになります
mysql>ホスト、ユーザー、パスワード、ユーザーからの削除_privを選択
+----------+-------------+------------- -------+----------+
| ユーザーのパスワード |
+----------+-- --- -------+------+-----------+
| ローカルホスト | 67457e226a1a15bd | |
| リモート管理者 | 77c590fa148bc9fb | -------+---------------+
さらに詳しい情報については、Yanzi の「MySQL 中国語リファレンス マニュアル」を参照してください。
2. ロギング機能の欠如
mysql のインストールが完了すると、my.ini 設定ファイルが %SystemRoot% ディレクトリに生成されます
デフォルトの内容は次のとおりです:
———————— ———— ——————————————————
basedir=C:/mysql
#bind-address=192.168.0.1
datadir=C:/mysql/data
# language =C:/mysql/share/あなたの言語ディレクトリ
#スロークエリログ#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
[WinMySQLadmin]
Server=C:/mysql/bin /mysqld-nt .exe
user=root
password=root
————————————————————————————————
次の点に注意してください。 log#=this
it 定義されていないため登録が解除されています。
次のような適切なパスに変更します:
log=c:/mysql/logs/mysql.log
3 つの.my.ini ファイルでパスワードが漏洩しています
my.ini の最後に次の 2 つの文があることがわかります
ユーザー=root
パスワード=root
インストール完了時に mysql が提供するクイックセットアップ機能を使用すると、(新しいバージョン) アカウントとパスワードが my.ini ファイルに書き込まれます。
これは、mysql がスタートアップ グループに書き込む winmysqladmin.exe ツールでもあり、実行時に読み取る必要があります。 mysql サービス
にいくつかの監視機能を提供します。このようにして、winmysqladmin.exe は mysql サービスのステータス情報を取得できます。
実際には、これは脆弱性ではありません。my.ini のデフォルトの権限を見てみましょう。ユーザー グループ内のユーザーが読み取ることができます。
これによりパスワードが漏洩します
解決策:
my.ini ファイルのアクセス許可をリセットします
アカウントとパスワードをリセットします
クイック設定を使用しないでください
4. サービスはデフォルトですべてのネットワーク インターフェイスにバインドされています。 is binding すべてのネットワーク インターフェイスにバインドされます。たとえば、内部ネットワーク上で実行する mysql サービスのみが必要であるが、マシンが外部ネットワーク上にインターフェイスを備えている場合、mysql もバインドされるため、不必要なトラブルが発生します。脅かす。
my.iniのこの文
#bind-address=192.168.0.1
デフォルトではログアウトされています
開いてください
ローカルでのみ使用する場合は、
bind-address=127.0.0.1に変更してください
もしそれがあれば、この場合、適切なネットワーク インターフェイスを選択する必要があります
5. デフォルトのインストール パスの Mysql ディレクトリのアクセス許可
mysql のデフォルトのインストール パスは c:\mysql ですが、これは基本的に変更するのが難しく、変更するのも面倒です。 .ini を変更する必要があります。
ただし、これには問題があります。
通常、c:\ の権限は、Everyone グループのすべての権限です。これはデフォルトです。継承により、mysql の下のデータ ディレクトリには、Everyone の group-all 権限も付与されます。これにより、ランダムアクセス、読み取り、削除が行われ、データが漏洩したり破壊される可能性があります。
mysql ディレクトリを適切で安全なアクセス許可に変更します。
終わった...
-------------------------------------------- ------ -------------------------------------------- -
ここには小さな構文エラーがあります。自分で見つけてください:)
setup~
3 構成ドキュメント
httpd.conf---apache
php.ini-----php
my.ini--- --- mysql
1.http.conf
Apache の ms バージョンには *nix のような
ユーザーおよびグループの命令がないため、
*Nix のようにサーバーの応答を iusr_name アカウントにマップすることは期待できません。 nobody なので、Apache は個人のホームページサーバーをセットアップするのには適していませんが、基本的に変更する必要があるのは次の場所です。 htdocs ディレクトリ内のすべてのファイルを削除します。cgi-bin 内のすべてのファイルを削除します。これらはテスト用であり、保持する必要はありません。 - デフォルトのホームページの名前
AccessFileName .htaccess -- ファイル名を制御します。オフにするか名前を変更することをお勧めします。Windows
ServerSignature では、「.」で始まるファイル名は許可されません -- エラー メッセージ, こうすることで、Apacheのバージョン番号が表示されなくなりますので、オフにすることをお勧めします。 ---- ------------
エイリアス/manual/ "D:/Apache/htdocs/manual/"
オプション インデックス FollowSymlinks マルチビュー
AllowOverride なし クリア
順序許可、拒否
すべてから許可
--------------------------- --------- ----------------
AddHandler cgi-script .cgi .pl --cgi をサポートする必要がある場合は、それを開く必要があります。そうでない場合は、コメントアウトします
LoadModule php4_module d:/php/sapi /php4apache.dll
AddModule mod_php4.c
AddType application/x-httpd-php .php --php スクリプトのサポートを追加します
2.php.inf
engine = On --php のサポートをオンにします。php の動作が許可されていない場合は、エンジン = Off
safe_mode = Off --セーフ モード、オンにする必要があります。safe_mode = On
safe_mode_exec_dir = --プログラムを実行できるディレクトリを設定します。セーフモード
disable_functions = 閉じる関数を「,」で区切ります。 phpinfo 、 get_cfg_var を閉じることをお勧めします
expose_php = On ヘッダーに PHP バージョン番号が表示されないように、expose_php = Off にすることをお勧めします
display_errors =On すべてのエラー メッセージがオフになるように、display_errors =Off にすることをお勧めします
register_globals = Off 自動グローバル変数、一般的に register_globals = On にする必要がありますが、多くのセキュリティ上の問題、特に不適切に記述されたものを引き起こす可能性がありますWeb サーバーを危険にさらす可能性のある PHP スクリプト。 File_uploads = ファイルのアップロードを許可するかどうかを指定します。必要がない場合はオフにします。
allow_url_fopen = Off 機能をリモートで開くかどうかを指定します。オフにすることをお勧めします。
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll いくつかの要件を開く サポートされているライブラリ (グラフィックス関数の使用など)
次のことが必要ですphp/extensions/php_gd.dll をシステム ディレクトリにコピーして削除します。
Apache を再起動すると使用できます
3.my.ini
上記のとおりです。
セキュリティ提案を通過し、上記の 3 つの設定の権限を設定します。ファイルをすべてのシステム権限とすべての管理者権限に設定します
4. 仮想ディレクトリのセキュリティを強化します
いくつかの重要な手順
具体的な例:
AllowOverride None
順序許可、拒否
すべてから許可
php_flag エンジン オフ 開く 0-off
php_admin_value open_basedir d:/Apache/htdocs/tools; これにより、php スクリプトが d:/Apache/htdocs/tools の下にあるファイルのみを開くように制限されます。
次のコードは役に立ちません
----------------------------------------------------- -------------------- -----------
$fd = fopen( $filename, "r" ); ($fd, filesize($filename));
echo "
"; <br>echo htmlspecialchars("$view"; <br>echo "";