|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板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
都可以,勿利用低版本的法式,它们出缺陷,很轻易遭到internet上的进击
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
一个运转于ms平台的gui的mysql的办理器,十分好用
phpMyAdmin-2.5.0-php.zip
基于php剧本的mysql办理器
phpencode.exe
php加密编译器
install~
1.装置apache
因为装置很复杂,pass~!,只是要注重的是,请勿装置到体系分区上
由于如许,不管从备份,保护,灾害性恢复上,都是有优势的.
假定装置到了d:\\
2.装置php
详细装置进程请参考php目次里的install.txt
需求注重的是,请勿利用cgi体例
以下为援用材料
------------------------------------------------------------------
Title 17/2/2002
PHP for Windows Arbitrary Files Execution (GIF, MP3)
Summary
Through PHP.EXE, an attacker can cause PHP to interpret any file as a PHP file,
even if its extensions are not PHP. This would enable the remote attacker to
execute arbitrary commands, leading to a system compromise.
Details
Vulnerable systems:
PHP version 4.1.1 under Windows
PHP version 4.0.4 under Windows
An attacker can upload innocent looking files (with mp3, txt or gif extensions)
through any uploading systems such as WebExplorer (or any other PHP program that
has uploading capabilities), and then request PHP to execute it.
Example:
After uploading a file a \"gif\" extension (in our example huh.gif) that contains
PHP code such as:
#------------
<?
phpinfo();
?>
#------------
An attacker can type the following address to get in to cause the PHP file to be
executed:
http://www.example.com/php/php.exe/UPLOAD_DIRECTORY/huh.gif
Notice: php/php.exe is included in the URL.
Additional information
The information has been provided by CompuMe and RootExtractor.
ps:大局部版本都有这个偏差.包含一些最新版本,所以请不要以cgi装置!切记...
3.装置mysql
装置到d:\\,也很复杂,详细进程pass.
只是mysql装置后的默许设置其实让人忧虑
以下援用我本来的文章
-----------------------------------------------------------------------------------
2002/12/21
写在后面:无事可做,性命被损耗,痛~~~啊,所以就写了,本文no原创,收拾整顿而成!
默许装置的mysql办事不平安要素触及的内容有:
一.mysql默许的受权表
二.缺少日记才能
三.my.ini文件泄漏口令
四.办事默许被绑定全体的收集接口上
五.默许装置途径下的mysql目次权限
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一.mysql默许的受权表
因为mysql对身份验证是基于mysql这个数据库的,也叫受权表。一切的权限设置都在这里了。
咱们只会商最为主要的一个表 user表。它掌握的是承受或回绝毗连。
先看一下
select host,user,password,Delete_priv from user;
+-----------+------+------------------+-------------+
| host | user | password | Delete_priv |
+-----------+------+------------------+-------------+
| localhost | root | 67457e226a1a15bd | Y |
| % | root | | Y |
| localhost | | | Y |
| % | | | N |
+-----------+------+------------------+-------------+
如今新的版本,装置终了城市呈现一个疾速设置窗口,用于设置口令。
以上,就是user内外的内容(略了点)看看有甚么成绩?
咱们晓得mysql的验证体例是对照特别的,它基于两个2个信息来停止的
1.从那边毗连
2.用户名
第一条没甚么成绩,固然口令必需是平安的。
第二条从任何主机,以用户root,不需求口令都可以毗连,权限为一切的权限。(注:这里的权限是全局权限)
第三条从当地主机,任何用户名(注:user为空白,不暗示不需求用户名),不需求口令,都可以毗连,一切的权限
第四条从任何主机,任何用户名,不需求口令,都可以毗连,无任何权限。
可以看出,2\\3\\4都是不平安的,若何进击这里就不说了,请参看材料文库。
假如你mysql只答应当地毗连,删除host的%和user中的nul(暗示空)
delete from user where host=‘%‘;
delete from host where user=‘‘;
最初的user表,看起来因该是这个模样
+-----------+------+------------------+-------------+
| host | user | password | Delete_priv |
+-----------+------+------------------+-------------+
| localhost | root | 67457e226a1a15bd | Y |
+-----------+------+------------------+-------------+
最初需求刷新受权表,使其立即失效
flush privileges;
假如你的mysql需求被近程利用,需求为%段中的root帐号,加上一个平安的暗码
update user set password=password(‘youpass‘) where host=‘%‘;
个中youpass,就是口令
mysql> select host,user,password,Delete_priv from user;
+-----------+------+------------------+-------------+
| host | user | password | Delete_priv |
+-----------+------+------------------+-------------+
| localhost | root | 67457e226a1a15bd | Y |
| % | root | 77c590fa148bc9fb | Y |
+-----------+------+------------------+-------------+
更好的做法是,对近程主机的毗连,指定为特定的
修正host中的%为答应毗连的主机,好比:
192.168.0.% 答应一个特定的子网
www.sandflee.net 答应一个特定的主机
帐号默许的名字也是忧虑的成绩。有能够招致被暴力破解
update user set user=‘localadmin‘ where host=‘localhost‘;
update user set user=‘remoteadmin‘ where host=‘%‘;
最初的user表看起来像是这个模样
mysql> select host,user,password,Delete_priv from user;
+-----------+-------------+------------------+-------------+
| host | user | password | Delete_priv |
+-----------+-------------+------------------+-------------+
| localhost | localadmin | 67457e226a1a15bd | Y |
| % | remoteadmin | 77c590fa148bc9fb | Y |
+-----------+-------------+------------------+-------------+
更加具体的材料,请去参考晏子的《MySQL中文参考手册》。随意那都有下
二.缺少日记才能
mysql装置完成今后,会在%SystemRoot%目次下发生my.ini的设置文件
默许的内容以下:
――――――――――――――――――――――――――――――
basedir=C:/mysql
#bind-address=192.168.0.1
datadir=C:/mysql/data
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
[WinMySQLadmin]
Server=C:/mysql/bin/mysqld-nt.exe
user=root
password=root
―――――――――――――――――――――――――――――――
注重log#=这个
它没有被界说,且被刊出失落了。
更改成一个合适的途径,好比:
log=c:/mysql/logs/mysql.log
三.my.ini文件泄漏口令
咱们看到my.ini最初,有这两句
user=root
password=root
假如,你装置完成时,利用了mysql所供应的疾速设置功效,(较新的版本)你的帐号和口令将被写到my.ini文件中。
这也是mysql写到启动组里的winmysqladmin.exe东西,运转时需求读取的。它供应的mysql办事
的一些监督功效。如许winmysqladmin.exe才干取得mysql办事的形态信息。
其实,这个也不算破绽,咱们看看my.ini默许的权限,它可以被user组用户读取。
从而招致口令被泄漏
处理办法:
重新设定my.ini文件的权限.
重新设定帐号及口令
不利用疾速设置
四.办事默许被绑定全体的收集接口上
办事被绑定到了一切的收集接口上,好比,你只需求一个运转在内网的mysql办事,然而你的机械有
外网的接口,mysql也会被绑定上,从而带来一些不用要的费事和威逼。
在my.ini里的这句
#bind-address=192.168.0.1
它默许被刊出失落了
应当翻开它
假如,只是当地利用,更改成
bind-address=127.0.0.1
假如是其它情形,应当选者一个适合的收集接口
五.默许装置途径下的mysql目次权限
mysql默许的装置途径为c:\\mysql,根基上都可贵改,要改的话也是费事,还要去改my.ini。
但,如许就有个成绩
凡是c:\\的权限是everyone组-一切的权限。这是默许的,因为承继性,招致mysql下的data目次
也是everyone组-一切的权限。招致被随便会见、读取、删除,能够泄漏和损坏数据。
更改mysql目次到一个适合,平安的会见权限。
over...
-----------------------------------------------------------------------------------------
这外面有个小小的语法毛病,请本人找出来:)
setup~
3个设置装备摆设文档
httpd.conf---apache
php.ini-----php
my.ini------mysql
1.http.conf
因为ms版本的apache不像*nix下有
user,group这两条指令,所以你别期望它能像iis一样,把办事器应对暗射到了iusr_name账号上
*nix下为nobody,所以你的apache是以system权限来运作的,它不太合适用于架设供应团体主页办事器
httpd.conf良多参数,根基不必修正就能够任务了
以下是要修正的中央
删除htdocs目次下的一切文件.删除cgi-bin下的一切文件,它们是用于测试用的,不该该被保存.
BindAddress * --需求绑定的地址 *只一切地址
DirectoryIndex index.html index.htm --默许首页的名字
AccessFileName .htaccess --掌握文件名字,建议关失落或更名字,并且以\".\"入手下手的文件名在windows下是不答应的
ServerSignature on --失足信息,建议off.如许就不会显示你apache的版本号了
-----------------------------------------------
Alias /manual/ \"D:/Apache/htdocs/manual/\"
<Directory \"D:/Apache/htdocs/manual\">
Options Indexes FollowSymlinks MultiViews
AllowOverride None 排除
Order allow,deny
Allow from all
</Directory>
-----------------------------------------------
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任务可以engine = Off
safe_mode = Off --平安形式,应当翻开它safe_mode = On
safe_mode_exec_dir = --设定平安形式下可以履行法式的目次
disable_functions = 要封闭的函数,用\",\"分隔建议封闭phpinfo,get_cfg_var
expose_php = On 建议expose_php = Off,如许在header里就不会有php的版本号
display_errors =On 建议 display_errors =Off,如许一切毛病信息,都将封闭
register_globals = Off 主动全局变量,普通都要翻开register_globals = On,但会激发良多
平安成绩,出格是一些写编写的不是很好的php剧本,有能够危及到你的web server
file_uploads = On 是不是答应上传文件,假如你不需求就off
allow_url_fopen = Off 是不是近程翻开功效,建议封闭
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll 翻开一些需求撑持的库,好比利用要利用图形函数
需求copy php/extensions/php_gd.dll到你的体系目次,然后去失落;
从头启动apache,就能够利用了
3.my.ini
下面有了,pass
平安建议,以上3个设置文件,把他们的权限设定为system一切权限,administrators一切权限
4.强化虚拟目次的平安性
一些主要的指令
详细的列子:
<Directory \"d:/Apache/htdocs/tools\">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
php_flag engine off ;封闭php注释履行功效
php_admin_value safe_mode 1 ;平安形式 1-翻开 0-封闭
php_admin_value open_basedir d:/Apache/htdocs/tools ;限制在一个制订的目次
如许就限制了php剧本只能翻开d:/Apache/htdocs/tools下的文件.
以下代码就没甚么用了
-----------------------------------------------------------
$fd = fopen( $filename, \"r\" );
$view = fread($fd, filesize($filename));
echo \"<pre>\";
echo htmlspecialchars(\"$view\";
echo \"</pre>\";
fclose( $fd );
-----------------------------------------------------------
启用apache-http验证功效
排除
<Directory \"d:/Apache/htdocs/home\">
...
...
allowoverride authconfig
</Directory>
中的
参数 allowoverride authconfig
注重的,这里的d:/Apache/htdocs/home,暗示为我装置的apache办事的web根目次,你的和我的纷歧定一样
默许的,好象就没这个 allowoverride authconfig参数。
allowoverride authconfig参数的寄义。
它的寄义是,根目次下一切目次的会见掌握由它目次下的.htaccess文件来设定。
这里,我要多说点空话了。
为何是.htaccess,这个文件名,而不是其它的。
这个是在AccessFileName参数中界说的。默许的是如许。
AccessFileName .htaccess
你要做的排除allowoverride authconfig参数(加#或删失落)
如许做的来由
1.我感觉费事(每一个目次都需求放上.htaccess文件,且以\".\"开首的文件名在windows体系下,是不答应的。)
2.不太平安 (它有能够被人看到。)
若何对你所想要指定的目次停止验证?
一个列子
<Directory \"d:/Apache/htdocs/home\"> //界说要验证目次途径
AuthType Basic //体例,windows不撑持md5,所以请利用basic体例
AuthName TEST //界说显示在对话框范畴名字
AuthUserFile d:/Apache/user //界说暗码文件
ErrorDocument 401 \"Error Password //界说验证掉败后显示的内容,固然可所以文件了
require valid-user 注重,我这里让它直接显示Error Password,用\"开首就是了,只要一个哦
</Directory>
直接加到httpd.conf前面就是了。
然后在apache的装置目次里的bin目次里有个htpasswd.exe文件
请到cmd下运转它
d:\\Apache\\bin>htpasswd.exe
Usage:
htpasswd [-cmdps] passwordfile username
htpasswd -b[cmdps] passwordfile username password
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file. //创立一个新的暗码文件(你第一次利用,因该利用这个参数)
-n Don\'t update file; display results on stdout. //显示到屏幕
-m Force MD5 encryption of the password (default). //加密口令(md5体例)默许的
-d Force CRYPT encryption of the password. //利用CRYPT体例加密口令
-p Do not encrypt the password (plaintext). //不加密口令
-s Force SHA encryption of the password. //利用sha算法加密
-b Use the password from the command line rather than prompting for it. //互交体例
On Windows, TPF and NetWare systems the \'-m\' flag is used by default.
On all other systems, the \'-p\' flag will probably not work.
――――――――――――――――――――――――――――――――――――――
列子:
d:\\Apache\\bin>htpasswd.exe -c d:\\apache\\user taotao
Automatically using MD5 format on Windows.
New password: ***
Re-type new password: ***
Adding password for user taotao
就创立完成了
个中,要注重的
passwordfile,不该该放到web目次,由于会被人下载,很蠢,固然暗码已被md5过
-c 参数是用于创立一个新的暗码文件。
d:\\apache\\user途径,要和你在
AuthUserFile d:/Apache/user 设置的分歧。
然后重新启动你的apache办事
记得备份你的httpd.conf,php.ini和my.ini
装置ZendOptimizer-2[1].1.0a-Windows-i386.exe
很复杂,它回主动修正你的php.ini(c:\\winnt\\php.ini)文件
添加了以下内容:
[Zend]
zend_optimizer.optimization_level=15
zend_extension_ts=\"C:\\Program Files\\Zend\\lib\\ZendOptimizer.dll\"
装置php优化器有良多的优点
减速了php的运转速度,最为主要的是它可以加密php剧本
如许你写在php剧本里的user ,pass就能够很好的被回护了
另外,你还可以修正apache的header,用utraedit32翻开ApacheCore.dll
查找你所对应的apache版本号,改成其余就能够了,好比我改成了
2000
算是1个熟悉的过程,所以c语言的基础有就更好,没有也不怕。 |
|