web安全学习笔记(二) Ubuntu+PHP+Apache+MySQL搭建网站——带cookie的登陆界面

步骤概要:

一、在虚拟机中安装ubuntu
二、安装PHP,Apache 和 MySQL
三、配置Apache
四、MySQL + PHP 搭建简单的登陆页面
五、效果展示

一、在虚拟机中安装ubunutu

这里使用Ubuntu 18.04.4 LTS, 下载链接。
打开vmware,点击创建新的虚拟机,选择下载好的ubuntu iso文件,根据指示,配置硬盘空间,内存,安装虚拟机即可,唯一需要注意的是,安装过程中可能出现卡在retrieving file这个页面(需要下载额外的东西),可以点击skip跳过。或是连接代理,速度会有明显提升。

二、安装PHP,Apache 和 MySQL

在Ubuntu 18.04.4 LTS 中,自带Apache,打开浏览器,输入localhost,即可查看:
在这里插入图片描述
接下来需要安装MySQL 和 PHP:

sudo apt install mysql-server mysql-client
sudo apt install php

安装完成后,查看mysql发现,拒绝登陆:
在这里插入图片描述
研究后发现,原来现在MySql安装后会生成随机的账户名和密码,在路径/etc/mysql/debian.cnf 下:
在这里插入图片描述
使用user和password进行登陆,然后修改root密码:

>update mysql.user set authentication_string=PASSWORD("这里输入你要改的密码") where User='root';
>update user set plugin="mysql_native_password";
>flush privileges;

重启MySQL服务,就可以使用root和新设置的密码进行登陆了。

三、配置Apache

如果用户从服务器请求目录,Apache将首先查找名为index.html的文件。在目录/var/www/html目录下,可以找到index.html:
在这里插入图片描述
查看index.html的内容:

cat /var/www/html/index.html | less

可以查看文件的内容:
在这里插入图片描述
即为访问http://localhost 时显示的页面。
由于搭建的是PHP,需要告诉web服务器,优先选择后缀为php的页面,修改文件/etc/apache2/mods-enabled/dir.conf:
在这里插入图片描述
将index.php 放在index.html 的前面,然后重新启动Apache服务:

sudo systemctl restart apache2

接下来,建立一个新的目录,并分配用户权限给这个目录:

sudo mkdir /var/www/php_website
sudo chmod -R 755 /var/www/php_website
sudo useradd -m php_admin
sudo passwd php_admin
#输入密码
sudo chown -R php_admin:php_admin /var/www/php_website/
sudo vi /var/www/php_website/index.html

在index.html 中新建粘贴如下代码:

<html>
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

为了让Apache提供支持,必须使用正确的指令创建虚拟主机文件。这里不修改/etc/apache2/sites-available/000-default.conf, 而是新建一个文件

sudo vi /etc/apache2/sites-available/php_website.conf

粘贴一下内容:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/php_website
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

启用新的.conf文件

sudo a2ensite php_website.conf
sudo a2dissite 000-default.conf
sudo systemctl restart apache2

此时访问localhost, 发现已经转到了刚刚新编写的index.html:
在这里插入图片描述
接下来测试一下PHP在服务器上的处理:
在/var/www/php_website目录下新建一个info.php文件,输入一下代码:

<?php
phpinfo();
?>

保存以后,访问localhost/info.php,可以看到显示了php的信息:
在这里插入图片描述
apache + php 已经配置完成了。

四、MySQL + PHP 搭建简单的登陆页面

为了安全考虑,首先新建一个MySQL数据库并且新建一个用户

CREATE DATABASE PHP;
CREATE USER 'phpadmin'@'localhost' IDENTIFIED BY '*******';
GRANT ALL ON PHP TO 'phpadmin'@'localhost';
CREATE TABLE user(name VARCHAR(100) NOT NULL, psw VARCHAR(100));

这样就新创建了数据库PHP和表user,以及用户phpadmin,只可以操作PHP这个数据库。

接下来就是编写PHP代码了,代码结构如下:
在这里插入图片描述
login.php源代码:

<!DOCTYPE html>
<html lang='zh'>
<head>
<title> login</title>
<meta charset="UTF-8">
</head>
<body>  
<form name="input" action="post.php" method="post">
用户名 :<br /><label>
        <input type="text" name="username">
    </label><br>
密码 :  <br /><label>
        <input type="password" name="password">
    </label> <br>
             <input type="submit" value="登陆">
		     <button><a href="reg.php">注册</a></button>
</form>
</body> 
</html>

当点击注册时,跳转到reg.php:

 <!DOCTYPE html>
<html>
<head>
<title> reg</title>
</head>
<body>  

<form name="input" action="regin.php" method="post">
用户名<br/><label>
        <input type="text" name="username">
    </label><br>
密码  <br/><label>
        <input type="password" name="password">
    </label> <br>
确认密码 <br/><label>
        <input type="password" name="con_password">
    </label> <br>
           <input type="submit" value="注册">
</body>
</html>

注册逻辑由regin.php处理:

 <?php
$conn=mysqli_connect("localhost",'phpadmin','******', 'PHP');
if ($conn->connect_error){
	die("connection fail:" . $conn->connect_error);
}

$name=trim($_POST['username']);
$password=trim($_POST['password']);
$con_password=trim($_POST['con_password']);
$sql = "select * from user where name='$name'";
$result = $conn->query($sql);

if(empty($name)){
	echo "<script>alert('user name can not be null');location.href='reg.php';</script>";
}else if(empty($password) && empty($conpassword)){
	echo "<script>alert('password can not be null');location.href='reg.php';</script>";
}else if($password <> $con_password){
	echo "<script>alert('password not correct');location.href='reg.php';</script>";
} else{
	echo "success";
	if($result->num_rows > 0){
		echo "<script>alert('User already exists');location.href='reg.php';</script>";
	}else{
		$sql_insert ="insert into user(name,psw) values('".$name."','" .($password)."')";
		if ($conn->query($sql_insert) === true){
			echo "<script>alert('success!')</script>",header("Location:login.php");
		} else{
			echo "<script>alert('fail!')</script>";
		}
	}
}

登陆逻辑由post.php处理:

<?php

$conn = new mysqli("localhost","phpadmin", "******","PHP");
if ($conn->connect_error){
    die("connection fail" . $conn->connect_error);
}
$name = trim($_POST['username']);
$psw = trim($_POST['password']);
$sql="select * from user where name='$name' and psw='$psw'";
if ($conn->query($sql)->num_rows > 0){
    setcookie('username',$name,time()+3600);
    header("Location:index.php");
} else{
    echo "login fail,<a href=\"login.php\">Please re-login</a>";
}

若登陆成功,跳转到index.php:

<?php
if (!isset($_COOKIE['username']))
{
    echo 'Illegal login!<a href="login.php">please login</a>';
    exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title> Hello World! </title>
    <meta charset="UTF-8">
</head>
<body>
Hello World!
<a href="logout.php">logout</a>
</body>
</html>

注销,logout.php:

<?php
if(isset($_COOKIE['username'])){
    setcookie('username',$name,time()-1);
    header('Location:login.php');
}
else{
    echo 'fail';
    header('Location:index.php');
}

五、效果展示

进入http://localhost/login.php:
在这里插入图片描述
点击注册跳转到注册页面:
在这里插入图片描述
如果注册过程不规范,会由相应的提示信息:
在这里插入图片描述
随便注册一个用户,进行登陆:
在这里插入图片描述
登陆成功后会跳转到index.php页面。
点击logout注销,如果在没有登陆的情况下,会提示非法登陆:
在这里插入图片描述
到这里就算用Linux+MySQL+Apache+PHP环境搭建了最简单的登陆界面了。

发布了3 篇原创文章 · 获赞 3 · 访问量 137

猜你喜欢

转载自blog.csdn.net/qycc3391/article/details/104373585