20145214 《网络对抗技术》 Web基础

1.实验后回答问题

(1)什么是表单

  • 表单在网页中主要负责数据采集,提供了填写数据、选择数据,收集数据并提交给后台的功能
  • 一个表单有三个基本组成部分:表单标签、表单域、表单按钮

(2)浏览器可以解析运行什么语言。

  • 支持HTML(超文本标记语言)、XML(可扩展标记语言)以及Python、PHP、JavaScript、ASP等众多脚本语言

(3)WebServer支持哪些动态语言

  • ASP、JSP、PHP等语言

2.实验总结与体会

  • 这次实验的过程还是遇到了许多的磕磕绊绊,总是会出现一些意料之外的好像别人都没有遇到的错误。举个栗子,在后端的php基础部分,修改完代码后如果顺利的话,应该登录并跳转到login.php,然而我的页面在登录后十分安静...查了又查、再查了又查,进行各种测试,后来才发现原来我的登录代码中用了post方法,但login.php中用了get方法,导致了数据无法传入。这才恍然大悟两者应该用同一种方法!借着这个错误又深刻地理解了post和get两种方法的区别,用get时登录后账户、密码等等信息都会直接显示在路径那一栏中,而改为post之后这些信息就不会直接显示出来了,以前都只是“听说”post方法更安全,借着这个实验终于切身体会到了何为安全
  • HTML和JavaScript的编写让我重温了上学期的网络编程基础课,后面的SQL注入实验也让我更深刻的理解了SQL语句都在干些什么,同时再一次意识到了网页和网站有多么的脆弱...

3.实践过程记录

(1)Web前端:HTML基础

  • 因为Web开发是基于Apache服务器进行的,所以apachectl start指令来开启Apache,此时出现了编号AH00558的错误。

  • 查询错误代码,并且根据提示对etc/apache2/apache2.conf路径下的文件在最后添加了一句:ServerName localhost:80。修改过后再次执行

  • 发现还存在端口被占用的问题,于是先netstat -tupln |grep 80查看80端口被哪些进程占用,再用kill+进程ID杀死进程。之后apache服务成功开启

  • 此时用netstat -aptn查看端口占用,可以看到80端口已经被apache占用了

  • 在浏览器中输入localhost:80可以看到上周克隆的网页,而且还惊喜的发现上周被玩坏的网页居然恢复正常了哈哈

  • 输入指令cd var/www/html进入Apache的工作目录,vi 5214.html新建一个含有表单的html,编写简单的登录代码,如下

  • 在浏览器里输入localhost:80/5214.html就可以看到登录界面啦

  • 处于好奇随便输入用户名和密码,点击登录,居然会让我选择是否记住密码,已经很像那么回事儿的感觉了~不过现在的状况是点击登录之后还是会仿佛什么事情都没有发生...我们还需要继续往下做

(2)Web前端:javascipt基础

  • JavaScript是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。
  • 这里我们用JavaScript编写验证用户名和密码的规则,在原来的5214.html进行如下修改

  • 修改之后验证一下,输入了用户名,但没有输入密码时,会弹出提示

(3)Web后端:MySQL基础

  • 我们使用MySQL作为后台数据库,/etc/init.d/mysql start指令开启mysql服务,之后mysql -u root -p并输入默认密码p@ssw0rd进入MySQL

  • use mysql;选择mysql数据库,update user set password=PASSWORD("20145214") where user='root';修改密码为20145214

  • flush privileges;更新权限,quit;退出MySQL,之后使用新修改的密码重新进行登录,保证密码修改成功

  • create database znzn;建立一个名为znzn的数据库,show databases;查看存在的数据库,可以看到刚刚新建的znzn数据库,use znzn;就可以使用我们创建的数据库znzn了

  • create table zn(username VARCHAR(50),password VARCHAR(50),telephone VARCHAR(11));建立一个名为zn的数据表,show tables;查看存在的数据表,一个数据库中可以包含若干个数据表

  • insert into 表名 values('值1','值2','值3'...);插入数据,如图,在zn表中插入了username为zn、password为20145214的数据

  • select * from zn查询表中的数据,可以看到刚刚插入的一段数据

  • grant select(insert,update,delete) on znzn.* to zn@localhost identified by "20145214";可以在MySQL中增加名为zn的新用户,增加新用户后退出

  • 重新使用新用户名和密码进行登录,登录成功说明增加新用户成功

(4)Web后端:PHP基础

  • vi /var/www/html/zn_test.php新建一个PHP测试文件

  • 在浏览器中打开localhost:80/zn_test.php进行测试,显示如下,测试成功

  • 完成简单测试后,参考卢肖明的博客中的代码,利用PHP和MySQL结合之前编的登录网页进行简单的用户身份认证,login.php编写如下

  • 将之前的5214.html中form表单属性中加上action="login.php",使用户登录后跳转到login.php

  • 用之前存入数据库中的数据登录,成功登陆,显示如下

  • 在login.php中加一行代码header("Refresh:3;url=welcome.php");实现在3秒之后跳转到对用户更友好的welcome.php页面

(5)SQL注入

  • SQL注入是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
  • SQL注入的产生原因通常是将用户输入的字符串,当成了 “sql语句” 来执行
  • 在账户输入框中输入' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为select * from zn where username='' or 1=1#' and password=''#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件肯定恒成立,所以能够成功登陆

  • 将之前编的代码中if ($result = $mysqli->query($query_str))改为if ($result = $mysqli->multi_query($query_str))实现执行多个sql语句,便可以通过SQL注入将用户名和密码保存在数据库中。在用户名输入框中输入';insert into zn values('lxm','5215','17888811781');#,拆开来看就是SELECT * FROM zn WHERE username='';、insert into zn values('lxm','5215','17888811781');,登录结果如下

  • 在数据库中查询,可以看到数据插入成功

  • 使用新插入的用户名和密码进行登录,登录成功

(6)XSS攻击测试

  • XSS表示Cross Site Scripting(跨站脚本攻击),通过插入恶意脚本,实现对用户游览器的控制
  • 假如用户提交的数据含有js代码,不做任何处理就保存到了数据库,读出来的时候这段js代码就变成了可执行的代码。一般用户提交的数据永远被认为是不安全的,在保存之前要做对应的处理。
  • 首先选定一张照片,原图如下。保存到/var/www/html目录下

  • 在账户输入框中输入<img src="5214.png" />20145214</a>读取/var/www/html目录下的图片

  • 登录后可以看到图片

最新文章

  1. AutoVue打开ProE工程图中文乱码
  2. 最大流 总结&amp;&amp;做题记录
  3. jQuery中.bind() .live() .delegate() .on()的区别
  4. android 隐藏标题栏的方法
  5. Node.js tools for visual studio 在vs中使用Node.js
  6. OpenGL ES 正反面设置指令
  7. c语言中双维数组与指针的那点事儿
  8. Java实现基本排序算法
  9. Eclipse 项目以非gradle方式导入Android Studio
  10. JVM学习(一)、垃圾收集器简介
  11. TessorFlow学习 之 序言
  12. Aspose.Words五 MergeField
  13. Socket通信的Python实现
  14. (转) SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程
  15. JAVA 操作Excel工具类
  16. MUI框架-05-用MUI做一个简单App
  17. 基于oracle数据库存储过程的创建及调用
  18. Spring 学习 5- task 定时任务
  19. elasticsearch 第一篇(入门篇)
  20. 极客Web前端开发资源大荟萃#001

热门文章

  1. haproxy + lvs异同(优点-缺点)
  2. 解决:Cannot load ocl.dll library(error code 126). The ocil.dll library may be missing from the system
  3. BUAA OO 2019 第一单元作业总结
  4. Qt中的QString和QStringList常用方法
  5. AWVS使用手册
  6. Docker:unauthorized: incorrect username or password.
  7. 洛谷 P1350 车的放置
  8. Design2:使用HierarchyID构建数据的分层结构
  9. 3.PO如何给开发团队讲好故事
  10. SourceTree跳过注册安装使用