本实践的具体要求有:javascript
Web前端HTML;能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。php
Web前端javascipt:理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。html
Web后端:MySQL基础:正常安装、启动MySQL,建库、建立用户、修改密码、建表前端
Web后端:编写PHP网页,链接数据库,进行用户认证java
最简单的SQL注入,XSS攻击测试python
登录后发帖及其会话管理(选作)mysql
注意:功能描述用户能登录,登录用户名密码保存在数据库中,登录成功显示欢迎页面。web
由于web卡发是基于apache服务器进行的,对于apache的基本操做是要掌握的,在上次的dns欺骗的实验中已经用过。对于apache曾经使用的过的端口能够在目录/etc/apapche2/
下的ports.conf
下进行修改。sql
使用命令apachel start
打卡apache,并使用命令netstat -atpn
查看使用端口数据库
netstat -tupln |grep80
,在使用kill+进程ID
来杀死进程,Apache服务开启后,咱们在浏览器中输入localhost:8080
由于受上次实验的影响打开的是上次的假装页面,上次最后作的是假装google邮箱。以后 进入目录var/www/html
,进入到apache的工做目录下,在这个目录下要常用到。此时咱们先简单的含有表单的html
文件,文件名为20145335.html
(由于这个是用来测试,因此就使用了ltc同窗的代码)
代码如上,在火狐浏览器下访问`localhost:8080/20145335.html`打开,由于没有编写以后的提交代码,点击提交会显示404网页错误。
注意:选用method是Post
,method的属性有两种分为Get
和Post
Get是用来从服务器上得到数据,而Post是用来向服务器上传递数据;
Get传输的数据量小,这主要是由于受URL长度限制,而Post能够传输大量的数据,因此在上传文件只能使用Post;
Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,而且二者使用“?”链接,而各个变量之间使用“&”链接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL;
JavaScript是一种属于网络的脚本语言,已经被普遍用于Web应用开发,经常使用来为网页添加各式各样的动态功能,现代全部的web都是使用javascipt来编写完成的。
一般Javascipt脚本是经过嵌入在HTML中来实现自身功能的。
代码以下
<html> <head> <meta charset="utf-8"> <title>login</title> </head> <body> <div id="container" style="width:500px"> <div id="header" style="background-color:#FFA500;"> <h1 style="margin-bottom:0;">Weclome</h1> <div id="login"style="backgroung-color:#EEEEEE:height:200px;width400px;float:left;" > <form name='form' class="form" method='get' action='login.php'> <input type="text" required="required" placeholder="username" name='username'> <br> <input type="password" required="required" placeholder="password" name='password'> <br> <button class="but" type='submit'>login</button> </form> </div> <div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">from 20145335.com</div> </div> </body> </html>
经过老师介绍的菜鸟网站菜鸟网站:javascipt教程能够很好的理解javascipt知识。
关于Mysql在之前遇到的计算机实习中,为了完成实验结果,恶补过该方面的知识=_=,对于windows下的命令行模式的mysq数据库的使用较为熟练,估计kali下也大同小异。
首先开启sql服务,使用命令/etc/init.d/mysql start
打开
mysql -u root -p
,并根据提示输入密码,默认密码为p@ssw0rd
(第二个是符号@
,第六个是数字0
)show database;
查看信息 ,注意:mysql的语句默认是以;分号
结尾,输入回车并不表明命令结束,一个分号算一个命令。use mysql
;,选择mysql数据库。(2)输入select user, password, host from user;
,mysql库中的user表中存储着用户名、密码与权限。(3)输入UPDATE user SET password=PASSWORD("新密码") WHERE user='root';
。(4)输入flush privileges;
,更新权限(5)输入quit
退出。mysql -u root -p
进入mysql,使用新修改的密码。在mysql中新建表,创建表以后在web中可使用相关信息。输入命令以下:
CREATE SCHEMA `库表的名称`; CREATE TABLE `库表的名称`.`users` ( `userid` INT NOT NULL COMMENT '', `username` VARCHAR(45) NULL COMMENT '', `password` VARCHAR(256) NULL COMMENT '', `enabled` VARCHAR(5) NULL COMMENT '', PRIMARY KEY (`userid`) COMMENT '');
use 新创建的库表的表名
、insert into users(userid,username,password,enabled) values(1,'用户id',password("用户密码"),"TRUE");
在目录/var/www/html
下新建一个20145335.php
测试文件,看是否能够打开。
用浏览器再地址栏输入localhost:8080/20145335.php
打开本地文件。成功打开,能够进行以后的步骤。
注意:所涉及到的文件名称须要放在同一个目录下即/var/www/html
首先编写登录界面login.html
,写登录界面的代码的时候加了一个框架<div>...</div>
使整个界面显的干净一些,但颜色并无分开,偷懒使用了一个颜色=_=。
login.php
代码实现与数据库的连接,按照老师的代码进行参考。有几点须要注意:命令$mysqli = new mysqli ("ip地址","mysql用户","mysql用户的密码","使用的表名")
ip地址填本机ip地址,就是127.0.0.1
,填写网络地址会影响到实验结果。localhost:8080/login.html
打开本地文件,就能够访问以前写好的网址,能够尝试很结果能成功登录的,也有登录失败的,没法链接的。
SQL注入,就是经过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来讲,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它能够经过在Web表单中输入(恶意)SQL语句获得一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。即sql注入是将用户输入的恶意字符串当成“sql”语句执行
在用户名输入框中输入' or 1=1#
密码随便输入,这时候的合成后的SQL查询语句为select * from users where username='' or 1=1#' and password=md5('')
由于1=1是为真,那么必定能够登上。
咱们还能够经过sql注入将用户名和密码保存在数据库中,可是须要修改以前的代码,由于咱们以前编的代码中if ($result = $mysqli->query($query_str))
这条判断语句不容许多条sql语句执行,因此将它改为if ($result = $mysqli->multi_query($query_str))
便能实现执行多个sql语句。
在欢迎界面用户用一栏内输入';insert into users(userid,username,password,enabled) values(777,'121212',password("121212"),"TRUE");#
进行尝试,在数据库中查询到。
以后使用命令`';insert into users(userid,username,password,enabled) values(555,'353535',password("353535"),"TRUE");#`也能够查询到。成功的用sql注入将信息保存在数据库中。
XSS表示Cross Site Scripting(跨站脚本攻击),经过插入恶意脚本,实现对用户游览器的控制。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞因为被骇客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
可是这个实验不论怎么作图片就是出不来,很心累=_=
将图片保存到以前的目录下/var/www/html,以后在用户名一栏输入命名<img src="20145335.jpg"/>5335</a>
尝试了不少次就是没有作出来。
/var/www/html
下,在浏览器中输入http://localhost:80/logIn.php
,进行登陆:start a new post!
发帖,进入以下界面:CHECK
查看发过的帖子,可是却什么内容都没有,因为这个操做是经过从data.txt
文件中读取以前发帖时保存的记录来查看发帖内容,可是在/var/www/html
目录下根本没有找到这个文件,这就说明以前建立也没有成功,后面发现/var/www/html
底下文件默认的都是属于root
的,其余用户没有权限进行操做,因此咱们能够先使用touch data.txt
建一个data.txt
文件,再对该文件进行加权:什么是表单?
答:表单是一个包含表单元素的区域,表单元素是容许用户在表单中(好比:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;
浏览器能够用什么语言?
答:常见的可使用html语言、xml语言、以及php语言、javascript语言,本次实验都有所涉及,还有python语言。
WebServer支持哪些动态语言?
答:javascript、ASP、PHP、Ruby等语言。
本次实验难度我的感受应该在网页的联通和测试上,代码是一项很大的问题,以前虽然有学过这个web前端的知识,可是也忘得差很少了,此次不少的问题都存在于代码的编写上,感受了攻克了代码问题实验也就好解决许多了,借助了老师给的代码的注释和代码不少问题仔细研究就会解决出来。