一.基础问题回答
- 什么是表单?
- 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;
- 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法;
- 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;
- 表单按钮:包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
- 浏览器可以解析运行什么语言?
- 支持html(超文本标记语言)、XML(可扩展标记语言)以及Python、php、javascript、ASP等众多脚本语言。
- WebServer支持哪些动态语言?
- JavaScript、ASP、PHP、Ruby等脚本语言。
二.实践过程
1.Web前端HTML
- 通过
service apache2 start
开启Apache,使用netstat -aptn
查看确认端口占用
- 浏览器中输入
127.0.0.1:8080
,登录到Apache首页验证其可用
- 访问Apache工作目录
cd /var/www/html
,新建一个test1.html文件,并且编写一个含有表单的html
- 访问
localhost/test1.html
,设计表单时有设计两个输入框的初始值
登录之后因为没有编辑php所以无法连接
2.Web前端javascript
- JavaScript是一种属于网络的脚本语言,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。
- DOM:文档对象模型,可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。
- 编写带有验证用户名和密码的规则功能的html
- 登陆网页,并进行验证
3.mysql基础
-
/etc/init.d/mysql start
打开mysql服务 -
mysql -u root -p
以root身份登录,输入默认密码为password,进入Mysql -
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 SCHEMA
4308zss;
创建库表 -
输入以下
-
use 4308zss
打开表,insert into users(userid,username,password,enabled) values(1,\'20154308\',password("20154308"),"TRUE");
进行内容的添加
4.php基础
- PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
- php安装
sudo apt-get install php
- 测试php。在原位置新建一个php文件
- 进入网址localhost/zss.php。OK的
5.PHP+MySQL实现登录网页编写
- 在进行这一部分的实验之前,要先理清楚html,php,mysql之间的关系。访问网页登录时会连接到php,而php会连接到指定的数据库,根据数据库里存在的记录进行匹配进而判断是否允许登录。
- 大部分代码都差不多,我觉得起到这种连接作用的是:html里的代码是:
<form method ="post" action="test.php" name="frmLogin" >
,test.php是后面要用到的php文件,也就是连接到这里;php里的代码是$query_str="SELECT * FROM users where username=\'{$uname}\' and password=password(\'{$pwd}\');";
users是之前mysql基础里新建的用户,在这个用户里有我新建的记录,用来匹配在网页上输入的用户密码是否正确。差不多就是这些,可以做实验了。 - 两段最终的正确的代码粘上来
html:
<html>
<head>
<title>test</title>
</head>
<body>
<table>
<form method ="post" action="test.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>
php:
<?php
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
/* echo $uname; */
$query_str="SELECT * FROM users where username=\'{$uname}\' and password=password(\'{$pwd}\');";
/* echo "<br> {$query_str} <br>";*/
$mysqli = new mysqli("127.0.0.1", "zss", "20154308", "4308zss");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\\n", $mysqli->connect_error);
exit();
}
echo "connection ok!";
/* Select queries return a resultset */
- 访问网址,并输入正确的用户名20154308和密码20154308
结果是这样,连接到php文件了但是后面就压根没有去连接我的数据库。检查php文件
之前说的应该填users的地方我一开始填了4308zss,这是我新建的库的名字啊,应该填用户名啊,改掉!再次登录是下面这样。
连接到数据库,但是匹配不了记录。可能是users这个用户的权限不够,于是赋予它所有权限grant select,insert,update,delete on 4308zss.* to users@localhost identified by "20154308";
但是结果好像一模一样,不可以!然后发现了我和某一个试验成功的同学的代码不一样的地方
- 下面改了之后正确的
- 下面是不成功的代码
细微的差别,可能是语法错误吧,最后改掉之后就ok了
下图是匹配正确的结果
6.SQL注入攻击
-
SQL注入攻击:可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
-
在登录界面用户名处输入\' or 1=1#,密码随意,发现可以成功登录
-
成功登陆的原因:
select * from users where username=\'\' or 1=1#\' and password=\'\'
,#是注释符,将其后面的内容给注释掉了,只剩下前面的1=1,当然是恒成立
7.xss攻击
- XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
- 将图片保存在/var/www/html下
- 在登录的用户名中输入:
<img src="0.jpg" />haha</a>
,密码随意 - 结果是login failed!!!(忘了截图)
- 参照同学博客的解决方法
但是一样的结果,也不可以……最后就是没看见图片
三.实践总结
- 做实验还是要首先明白实验思路以及包含的强烈的逻辑关系,搞清楚各个部分之间的关系,就比如这次的html,php,数据库之间的关系,如何连接在一起撑起了一个网页,虽然只是明白了一点皮毛但还是很有成就感!
- 了解了一些针对网页的攻击sql注入,xss攻击,很基础的攻击,但是也让我们明白了很多原理,如果以后要做网页开发的话就要格外注意。