20154323_胡冰源_Exp8

Posted on 2018-05-22 21:26  20154323_胡冰源  阅读(156)  评论(1编辑  收藏

该实验已经完成。

实验报告已经写完了。

只是提交作业的名字改不了了,虽然写的是(未完成)但是实际上已经写完了。

 

 

 

 

 

 

EXP8 Web基础

一、基础问题回答

1.什么是表单?

  • 表单:表单在网页中主要负责数据采集功能。
  • 基本组成部分:
  • 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
  • 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
  • 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

2.浏览器可以解析运行什么语言

  • 超文本标记语言:HTML
  • 可扩展标记语言:XML
  • 脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。

3.WebServer支持哪些动态语言

  • 常用的有:ASP语言,PHP语言和JSP语言。

二、实践过程记录

2.1 Web前端HTML

(1).启动apache服务,键入service apache2 start

(2).修改一下端口号与上次实验有所区分,键入 leafpad /etc/apache2/ports.conf

 

使用 netstat -aptn 查看一下端口占用。

 

(3).验证能否访问4323端口,在火狐浏览器键入localhost:4323,能正常访问即可。

 

也不知道为什么我的机器输入172.0.0.1访问不上,输入localhost才访问得上。所以我后面的实验都输入localhost。

如图:这样就可以。

 

 4.访问Apache工作目录cd /var/www/html,新建一个4323.html文件

5.编写一个含有表单的html

6.登录浏览器,输入localhost:4323/4323.html,成功出现下图界面

 

 7.在上面的文本框内随意输入,然后点击确认按钮数据会传送到html_form_action.php的页面,由于没有对此页面进行编辑,出现的是404

2.2 Web前端javascipt

JavaScript是一种属于网络的脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。

DOM:文档对象模型,可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。

1.编写验证用户名和密码的规则:(比如用户名和密码不能为空)
代码如下:

2.登入浏览器,输入localhost:4323/HBY.html进行测试。

 

忘记输入密码时显示:

 

当没有密码小于6位时,出现如下界面:

 

2.3 MySQL基础

mysql是一个数据库,我们这次进行了简单的应用:开启mysql,并更改用户名密码;建立库表,并插入数据;实现网页和数据库的连接。

1.输入/etc/init.d/mysql start打开mysql服务

2.输入mysql -u root -p,以root身份登录,根据提示输入密码,默认密码为p@ssw0rd,进入MySQL

  • 在MySQL中输入命令后面都要带一个分号作为命令结束符

3.修改密码

  • 输入use mysql;,选择mysql数据库

 输入select user, password, host from user;,显示mysql库中已有的用户名、密码与权限

  • 输入UPDATE user SET password=PASSWORD("新密码") WHERE user='root';更改用户名root的密码

  •  

  • 输入flush privileges;,更新权限。

 

输入quit退出,重新输入mysql -u root -p重新进入,使用新密码登录成功,说明修改成功

使用 create database `库名`; 成功创建一个数据库,使用指令 show databases;就可以查看到已有的数据库。

使用我们创建的数据库,使用指令 create table 4323-hby (username VARCHAR(20), password VARCHAR(20)); 创建一张表格。

使用指令 show tables; 查看表格,输入 describe 表名;可以查看表内设定的参数。

使用指令 insert into 4323-hby values('HBY4323','20154311'); 插入数据,使用select指令可以查看到我们添加的数据。

到此就基本创建了一个有一条数据一张表的数据库。

2.4 PHP基础

PHP(Hypertext Preprocessor)是一种通用开源脚本语言。主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率高,PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

1.测试一下php。还是在原位置新建一个php文件
*以下是一个php测试代码:

2.浏览器打开localhost:4323/hby.php

2.5 PHP+MySQL实现登录网页编写

在我第一次进行操作时,使用的是以下的代码:

结果出现了以下情况:

这代码里面不知道有什么问题。我换了一个。

以下就是我使用的网页代码:

 

<html> 

 

<head> 

 

<title>test</title>  

 

</head>

 

<body>          

 

<table> 

 

    <form method ="POST"action="login.php"name="frmLogin"  > 

 

    <tr> 

 

    <td>user</td> 

 

    <td><input type="text"name="username"value="Your name"size="20"onfocus="if (this.value=='Your name') this.value='';" /></td> 

 

    <td></td> 

 

    <td></td> 

 

    </tr> 

 

    <tr> 

 

    <td>password</td> 

 

<td><input type="password"name="password"value="Your password"size="20"maxlength="20"onfocus="if (this.value=='Your password') this.value='';" /></td> 

 

    <td></td> 

 

    <td></td> 

 

    </tr> 

 

    <tr> 

 

    <td><input type="checkbox"name="zlogin"value="1">auto login</td> 

 

    </tr>    

 

    <table> 

 

    <tr> 

 

        <td><input type="submit"name="login"value="login"onClick="return validateLogin()"/></td> 

 

        <td><input type="reset"name="rs"value="reset" /></td> 

 

        </tr>

 

    </table>   

 

    </form>

 

</table>  

 

 

 

<script language="javascript"> 

 

    functionvalidateLogin(){ 

 

        var sUserName = document.frmLogin.username.value ; 

 

        var sPassword = document.frmLogin.password.value ;   

 

        if ((sUserName =="") || (sUserName=="Your name")){ 

 

        alert("user name"); 

 

        returnfalse

 

        } 

 

 

 

        if ((sPassword =="") || (sPassword=="Your password")){ 

 

        alert("password!"); 

 

        returnfalse

 

        } 

 

 

 

    }  

 

</script> 

 

</body> 

 

</html> 

这是可以使用的:

由于前面的一些操作不当,我的数据库建立得不好,没有记录用户名和密码,所以我把前面的重新来了一遍。

所以,我新建了数据库和表,方便记忆

  • 数据库名:hubingyuan
  • 表名:hubingyuan
  • 在表中添加用户和密码分别为:hubingyuan hubingyuan
  • 在MySQL中新建用户hubingyuan
    使用grant select,insert,update,delete on 数据库名.* to 用户名@localhost, identified by "密码";这句话的意思是将对某数据库的所有表的select,insert,update,delete权限授予某ip登录的某用户。
    我的修改为grant select,insert,update,delete on hubingyuan.* to hubingyuan@localhost identified by "hubingyuan";
  • 我刚开始没有办法,就是在这里卡了半天:
  •  

3.利用PHP和MySQL结合之前编的登录网页进行简单的用户身份认证,这里我参考的是老师给的代码编写login.php,代码如下所示:

<?php
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
/* echo $uname; */
$query_str="SELECT * FROM hubingyuan where username='$uname' and password='$pwd';";
/* echo "<br> {$query_str} <br>";*/
$mysqli = new mysqli("127.0.0.1", "hubingyuan", "hubingyuan", "hubingyuan");
/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}
echo "connection ok!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str)) {
    if ($result->num_rows > 0 ){
        echo "<br> Welcome login Mr/Mrs:{$uname} <br> ";
    } else {
        echo "<br> login failed!!!! <br> " ;
    }
    /* free result set */
    $result->close();
}

$mysqli->close();
?>
 
这里有几点需要注意:
A.代码第二三行中无论是GET也行,POST也好,一定要与html文件中的method一致。
B.上文已经提到,若登录见面只有“connect is OK”,需要将这里(粗体字)改为表名:$query_str="SELECT * FROM hubingyuan where username='$uname' and password='$pwd';";
 
C.这里分别是填写:本机地址、MySQL登录用户名、MySQL登录密码、数据库名:$mysqli = new mysqli("127.0.0.1", "hubingyuan", "hubingyuan", "hubingyuan");
 

4.打开浏览器输入localhost:4323/login.php

为什么只有 connection ok?前面已经说过,要这样做:

这样就可以了。当用户名和密码不匹配时,出现以下界面:

当用户名和密码匹配时,出现以下界面:

2.6 SQL注入攻击

SQL注入攻击:可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

1.在登录界面用户名处输入' or 1=1#,密码随意,发现可以成功登录

  • 成功登陆的原因是这样的:
    在代码中有这个语句select * from users where username='' or 1=1#' and password='' #是注释符,将其后面的内容给注释掉了,只剩下前面的1=1,恒成立,所以就可以成功登录啦。

2.将login.php文件中if($result = $mysqli->query($query_str))改为if ($result = $mysqli->multi_query($query_str))实现执行多个sql语句

3.在用户名输入框中输入';insert into hubingyuan values('hby','00000');#SELECT * FROM hubingyuan WHERE username='' insert into hubingyuan values('hby','00000'); 提示登录失败。

4.到数据库里查看表的内容就发现多了一条用户信息,下次就可直接用这条用户信息登录。

2.7 xss攻击

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

1.先将图片保存在/var/www/html下

2.在登录的用户名中输入:<img src="4323.jpg" />haha</a>,密码随意

扩展名一定要正确。

3.点击登录,还是这样的界面,又出问题了:

4.打开login.php,取消掉这行注释

5.重新登录,看到了图片。这是古代养生功法八段锦中的一个动作,可以试一试。

 

心得体会:

这次实验做得挺有趣,但是也挺难,难在对连贯性的要求相当高。如果只是草草完成任务,你会发现数据库草草建立,后面的实验做不出来,因为后面的攻击是建立在数据库建立后的基础上的。我们尝试了攻击,在登陆界面输入一些奇怪的字符,就可以注入图片,还有修改数据库的内容,真的很强大。同时对对HTML、PHP有了进一步的理解。颇有收获。