要学习Web安全,首先就必须要对网站有所了解。
搭建网站的方法有很多,很多初学者都是利用phpStudy之类的模拟软件来一键搭建网站,但我还是更加推荐在CentOS系统中搭建一个真实的网站。当然这会涉及大量的操作,整体比较繁琐,但只有这样,才能为我们奠定良好的基础,对网站以及整个服务器才能有更为深入的了解。因为我们所需要的并非仅仅只是一个可以运行的网站,而是需要从整个服务器的角度去了解网站的整体架构,以及如何对网站进行维护和配置。
另外,我也强烈推荐各位能够购买一台云服务器,这将非常有助于提高自己的实践能力。如果我们掌握了搭建网站的方法,那么对云服务器的配置自然也就驾轻就熟了。
因而除了Kali之外,我们还需要再创建一台CentOS虚拟机,并在其中安装LAMP(Linux+Apache+MySQL+PHP)。
什么是LAMP
Web服务器主要由以下四个部分组成:操作系统、Web容器、脚本语言程序、数据库。
操作系统主要是Linux和Windows Server,目前绝大多数的服务器都是采用的Linux系统,尤其是CentOS,因为它本身就是一个专门用于服务器的操作系统。这里推荐使用CentOS7.9。
Web容器是用于提供Web服务的服务程序,就像在客户端必须要借助于浏览器才能访问网站一样,在服务器端也同样要借助于Web容器才能提供Web服务。目前常用的Web容器主要有Apache、Nginx和IIS等,我们这里使用的是Apache。
除了Apache这类Web服务程序之外,我们还需要安装脚本语言程序与之配合。因为Apache或Nginx默认只支持对静态资源的访问,本身并不具备执行脚本程序的能力。而目前的网站则基本都是采用的动态资源,这就必须要借助于外部程序来运行脚本程序,如ASP.NET、PHP或JSP等。我们这里使用的脚本程序是PHP。
数据库也是网站的核心组成部分,因为网站中的绝大部分数据都是存储在数据库中。我们这里使用的是MySQL数据库。
安装LAMP
在部署LAMP时,软件安装的一般顺序是Apache→PHP→MySQL。
首先安装Apache。
Apache的软件名和所对应的服务名都是httpd,执行下面的命令安装启动httpd服务,并将其设为开机自动运行。
由于Apache中已经设置好了一个默认的Web站点,因而这时在客户端输入Web服务器的IP地址就可以访问默认网站了。
如果在客户端无法正常访问,那多半是由于防火墙或SELinux的原因,需要将服务端的防火墙和SELinux关闭。
Apache本身只支持静态网页,所以下面我们再接着安装PHP。
PHP安装包的名称就是php,CentOS7系统中所提供的PHP版本是5.4.16。需要注意的是,PHP并不是一个独立的服务,而是被视作Apache的一个功能模块,因而在安装完PHP之后,我们只需要重启httpd服务,即可生效。
下面来测试Web服务器是否可以支持PHP动态页面。
首先在网站主目录“/var/www/html”中生成一个PHP的测试网页test.php,页面代码中只有一个phpinfo()函数。当客户端访问test.php页面时,会先在服务器端执行该函数,然后将函数执行结果返回给客户端。
然后在客户端浏览器中输入URL “http://服务器IP/test.php”访问测试页面,如果成功出现下图所示页面,则证明Apache已经可以支持PHP动态网页了。
在下面继续安装MySQL之前,我们还需要再安装一个软件包php-mysql,只有安装了这个软件包之后,PHP才可以操作MySQL数据库。当然这个软件包也可以在安装PHP软件包时一同安装。安装完成后,同样需要重启httpd服务使之生效。
最后再安装MySQL。在CentOS7系统中默认提供的是MySQL的分支MariaDB,但MariaDB与MySQL完全兼容,所以我们完全可以使用它作为MySQL的替代品。
MariaDB服务的安装包名称为mariadb-server,安装完软件之后,仍是启动服务,并将之设为开机自动运行。
下面还需要对mariaDB做一些初始化的操作,主要是设置mariaDB的管理员密码。mariaDB的管理员账号也叫root,但并非Linux中的根用户,他们只是名字相同而已。
可以利用CentOS中的mysqladmin命令为mariaDB的管理员账号设置密码:
然后就可以利用客户端工具mysql来登录mariaDB了,成功登录之后可以进入mariaDB的交互模式,使用quit或exit命令可以退出。
下面我们来测试是否可以利用PHP来连接mariaDB数据库。仍然在网站主目录“/var/www/html”中创建一个测试页面test2.php,页面代码如下。
这段代码表示以root用户的身份,使用密码“123”来连接位于本地服务器上的mariaDB数据库,如果连接成功,则输出“success”,否则输出“fail”。
在客户端通过URL“http://服务器IP/test2.php”访问该测试页面,如果出现“success”则表示之前的配置全部成功。
至此,一个功能完备的LAMP平台就搭建好了。