20154303 Exp8 Web基础
基础问题回答
- 什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;
- 表单标签(
<form>
):这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法; - 表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;
- 表单按钮:包括提交按钮、复位按钮和一般按钮,用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
- 浏览器可以解析运行什么语言?
- 支持HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言。
- WebServer支持哪些动态语言? JavaScript、ASP、PHP、Ruby等脚本语言,ASP基于IIS WEB SERVER,是微软的服务器端脚本技术,PHP基于APACHE WEB SERVER,与ASP有几分类似,都是一种在服务器端执行的嵌入HTML文档的脚本语言。
Web前端:HTML基础
-
首先,我们的要安装Apache,直接用指令
sudo apt-get install apache2
就可以,对于Apache使用的端口我们也可以通过sudo vi /etc/apache2/ports.conf
指令来进行修改,上次实验中我们就是将端口改到了80。我们使用指令apachectl start
打开Apache服务,使用netstat -aptn
查看一下端口占用,由于上次修改了端口文件,所以还是占用了80端口:
Apache服务开启后,我们在浏览器中输入localhost:80
进行查看,然后看到Apache是工作的
输入cd var/www/html,把路径转到Apache路径下,输入vi 4303.html
进入编辑界面,核心代码大致如下:
大致网页效果如下图
Web前端:javascipt基础
- JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果,通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
- DOM是文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,换句话说,这是表示和处理一个HTML或XML文档的常用方法。举个例子,要改变页面的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过DOM来获得的。
- 我们可以使用JavaScript来编写一个验证用户名、密码的规则,直接在之前的代码上进行修改,重命名为vi test.html。
其实很简单,就编了一个验证的函数,如果输入的用户名或者密码为空时,就弹出相应的对话框,然后在点击登录按钮时调用执行一遍这个函数,可以打开看看效果:
Web后端:MySQL基础
- 在web开发中我们要用到后台数据库,而MySQL就是一个数据库管理系统,类似的还有SqlServer、oracle等等,由于MySQL是开放的,不收费,所以一般中小型网站的开发都选择MySQL作为网站数据库。
-
先输入
/etc/init.d/mysql start
指令开启mysql服务,输入mysql -u root -p
,并根据提示输入密码,默认密码为p@ssw0rd
,进入MySQL,注意:在MySQL中输入命令后面都要带一个分号作为命令结束符:
我们可以对密码进行修改:输入use mysql;
,选择mysql数据库;输入update user set password=PASSWORD("新密码") where user='root';
,修改密码;输入flush privileges;
,更新权限;接着输入quit退出MySQL,重新进入,使用新密码登录成功,说明修改成功:
我们先使用create database 库名;
建立一个数据库;使用show databases;
查看存在的数据库;使用use 库名;
使用我们创建的数据库:
接着使用create table 表名 (字段设定列表);
建立数据表,数据表是数据库中一个非常重要的对象,一个数据库中可能包含若干个数据表;使用show tables
查看存在的数据表:
使用insert into 表名 values('值1','值2','值3'...);
插入数据;使用select * from 表名
查询表中的数据:
我们还可以在MySQL中增加新用户,使用grant select(insert,update,delete) on 数据库.* to 用户名@登录主机 identified by "密码";
指令,如图所示,增加新用户之后,退出,重新使用新用户名和密码进行登录,登录成功说明增加新用户成功:
Web后端:PHP基础
- PHP是一种通用开源脚本语言,语法吸收了C语言、Java和Perl的特点,主要适用于Web开发领域。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
- 在
/var/www/html
文件夹下输入vim login.html
,编写登录网页 - 在同样的目录下输入vim login.php,通过php实现对数据库的连接
- 在浏览器中输入
localhost:80/login.html
,就可以访问自己的登陆页面啦,这里套用了一个模板让页面看起来更加美观- 注意:此处的用户名是自己在库表中新建的用户以及对应的密码,在上一节中我新建的用户是:zx,密码是123.(截图是我重新做的时候截的,密码为20154303)
SQL注入
- SQL注入是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- 具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
- 简单地说,SQL注入的产生原因通常是将用户输入的字符串,当成了 “sql语句” 来执行。
- 搭建一个网站实现用户登录,这一步已经完成。
- 构造SQL语句:在用户名输入框中输密码随便输入,这时候的合成后的SQL查询语句为
select * from users where username='' or 1=1#' and password=md5('')
以下的两句sql语句等价:select * from users where username='' or 1=1#' and password=md5('')
select * from users where username='' or 1=1
- 因为
1=1
永远是都是成立的,即where
子句总是为真,所以能够成功登录XSS表示Cross Site Scripting(跨站脚本攻击),通过插入恶意脚本,实现对用户游览器的控制。
具体来说假如用户提交的数据含有js代码,不做任何处理就保存到了数据库,读出来的时候这段js代码就变成了可执行的代码。一般用户提交的数据永远被认为是不安全的,在保存之前要做对应的处理。- xss攻击可以分成两种类型:非持久型攻击、持久型攻击
- 非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
-
持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。
- xss攻击也可以分成三类:
- 反射型:经过后端,不经过数据库
- 存储型:经过后端,经过数据库
- DOM:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
- 输入
<img src="123.JPG" />
三、实验总结与体会
- 这次实验内容比较多,所以比以往的实验复杂了些,主要是我们要学着学习一些代码,是在做到sql注入和XSS攻击的时候,我觉得网页攻击还是非常可怕的,因为现在的网页很多都会连接这数据库。实验给我的收获还是很大的,提高了我对于网站攻击和数据库安全的警觉性。
- 注意:此处的用户名是自己在库表中新建的用户以及对应的密码,在上一节中我新建的用户是:zx,密码是123.(截图是我重新做的时候截的,密码为20154303)