20165207 Exp8 Web基础
本来我以为用上学期学的JavaWeb那一套东西就可以的,后来才发现后台连接数据库用的是PHP
那让我开始学习新知识吧!
0. 环境配置
0.1. apache
输入命令service start apache2,apache可以正常启动
在apache的默认配置文件中查找设置监听端口的文件的位置
修改监听端口,因为这个端口太常用了,不改肯定会出错……
就这样,不加ssl的时候的监听端口被我配成了5207
apache正常工作的测试在编写HTML网页时进行。
0.2. MySQL
在实验指导里面,创建的是一个模式,也就是“CREATE SCHEMA”,其实在上学期学习的数据库课程中,我记得模式和库是有一些区别的。
“模式”也被称为“架构”,实际上应该是某个数据库下的一个特定的命名空间。
我之前使用的是SQLServer学的数据库,在SQLserver里,用户创建了一个数据库之后DBMS会自动为用户创建一个模式名为dbo。
所以实验指导里面的“CREATE SCHEMA”建库的方法引起了我的疑惑
原来,官方文档里面说MySQL里面这两个是同义词
那我就乖乖按照实验指导里面做了。
首先,MySQL服务能正常启动
以root用户的身份登录,查看当前数据库
创建一个库(模式)exp9_5207
哈哈,我的MySQL可以补全单引号啊,改一下,成了
建表,然后show一下看看成功了没有
然后往这个表里面插入一条用户信息
额,看来20个长度的pwd不够啊,查一下password函数的输出长度吧
那就alter改一下表,然后再插入叭
0.3. php
按照实验指导,编写php源文件测试能够正常工作
没问题
0.4. php-mysql编程库
输入实验指导里面搜索库的位置的命令
看来环境基本都没问题,然后开始做实验了。
1. 前台HTML编写静态网页
编写一个html的网页,里面含有表单,但是什么也不做,就是form的属性里面没有关联的action
拖进浏览器里面的效果是这样子的
然后可以往里面加一些东西了
2. 前台HTML中加入JavaScript和css
2.1. 加入css
毕竟要好看一点
上网找了一个说的过去的css,
大概长这样
把人家的一个图片(被我小p了一下要放标题嘛)文件夹和css文件拷贝到我的目录下
添加一句引入css的代码
新的html效果是这样的
好了,不丑了,可以发布到apache了,把images文件夹和那几个css相关的文件夹拷贝到/var/www/html路径下
因为开apache2之后才改的监听端口,所以要把apache重新起一下,然后输入网址:127.0.0.1:5207/exp9_2.html
当然之后还会有exp9_3、4 ……
2.2. 使用JavaScript在前台验证登录
嗯,很蠢,用户名密码都写进前台网页源代码里面了,就,温习一下我的JavaScript
效果是这样子的,嗯
其实下面有两个关闭,一个是个button另一个是个超链接,里面用JavaScript写了关闭页面的语句,在我主机里面试,点这两个都可以关闭,
但是在虚拟机里就不行了……咋点也关不掉
3. 后台php连接数据库通过数据操作实现登录等业务逻辑
有业务逻辑了,表单得有action了,action设置成一个php源代码的名字login.php,表示表单提交之后由这个php文件来处理。
action的方法设成了post因为post方法安全那么一点点。
编写PHP代码,按着实验指导,但是用post的方法编的,就这样
但是出现了问题:
我第一反应是我那边还有一个终端在以root用户的身份操纵数据,喏
先退出试一下,当然是没用的了,最开始在我配置密码的时候我发现,
我的root用户有了新密码居然还是可以敲个回车就进去,我就意识到我这个mysql不简单了
在尝试了各种办法,经历了“一杯茶,一包烟,一行代码看一天之后”,我终于把kali恢复快照然后重启了
让人高兴的是,他终于不报连接的错误了
因为现在是登录失败,
我大概是看了一天代码然后傻了,因为设计的时候让输的是用户id,我现在敲的是用户名
唉,那么下面能否见证奇迹呢?
喔!太感动了,这一天掉的头发值了
4. 测试最简单的SQL注入与XSS攻击
4.1. 最简单的sql注入
学javaweb的时候老师讲过,就是or上一个永真式
而且,我的PHP代码里肯定没有去掉单引号的语句,应该能成功,唯一难点就是单引号
就算试都能试出来
当然我是按着sql语句构造的单引号
没有很大难度
也可以不让最后一个单引号对称,直接把1=1后面的单引号注释掉
4.2. XSS攻击
对于这个的原理我不是特别懂,我理解就是用户在输入框里输入了一串脚本的代码
后台回显出来一个动态的html网页的时候,像这样直接回显前台传来的东西
里面如果是个JavaScript就能被执行。
但是我觉得我的PHP代码没有这个漏洞,因为我只有在登录验证成功的时候才会回显post传来的前台输入,但是如果前台输入的不对,根本就不会登录成功
不成功,就不可能把post来用户名拼接到欢迎语句里
那先试一下输出图片,当然我不可能知道服务器的文件夹里的文件都是啥,只是用一个img标签先验证一下我的分析
当然是不行的,因为登录失败了,不可能给回显
那如果用sql注入配合xss攻击呢,就是先让他登录成功,然后就能打印出来post来的东西了
果然如此
再注个Javascript试试
成了,JavaScript的alert函数被执行了
4.3. 这个XSS该怎么补上
刚才执行alert函数以及回显图片成功的前提都是sql注入成功了,sql注入又依赖于单引号的平衡,所以只要不让在用户名框里面输入单引号,两个问题就都解决了
5. 回答问题
5.1. 什么是表单
表单是用来把前台上用户输入的数据传递给后台的工具,表单(form)内可以有文本框、密码框、复选框、下拉框、按钮等等,依据业务逻辑给后台或者JavaScript传递相应的信息
5.2. 浏览器可以解析什么语言
很多脚本语言都可以,html、javascript……,但是像微软的ps1脚本这种需要powershell这样的专门的环境的脚本语言不可以
5.3. WebServer支持什么动态语言
上学期学了jsp
这次用的php
讲数据库的时候老师提到过asp.net开发动态网页的技术
我只知道这三种