在本次实验中,咱们实现了一个小的web程序,包括前端的设计,后台的设计,数据库的链接等,这些在上学期的web编程设计课上也学习了。实验中,咱们又测试了使用sql语句的注入,实现不合法用户的成功登录和数据库信息的恶意添加,可是可以实现这些注入,重点的仍是看本身写的代码是否有漏洞,就像在后面的实验步骤里我所讲的同样(以老师指导上的php代码为例),若是利用永真式来达到非法登录,在最初始使用的php代码是能够实现的,但若是咱们将判断合法用户的条件改成=1,则大大的减少了非法用户登录的可能性(利用永真式的话),但这只是大大的,并非不可能,因此咱们还能够修改php中sql语句的设计,不让sql语句同前端用户输入的信息有关联,就更能够减小sql语句的注入了,因此说,代码的完整度越高、考虑得越全面,可以捕捉到的代码漏洞也就越少,安全问题也就越能够尽可能多的避免。
配置apache2端口为8087
php
开启apache2,查看当前开启端口运行状况
css
打开浏览器输入127.0.0.1:8087,肯定是否成功打开apache(此处因上次实验而把本机地址网站页面copy成新浪首页)
html
在/var/www/html下新建文件,测试是否能在浏览器中成功打开
前端
继续在同一目录下编写html主页,如图
java
在浏览器中打开HTML
python
点击Login GET,发如今URL栏中能够看出传送的明文密码与用户名
mysql
点击Login POST,发如今URL栏已不能够看出明文密码与用户名
web
在html主页的基础上,使用javascipt对头部分添加判断密码框输入字符是否大于5个
sql
在浏览器中打开更新后的主页,输入密码字符数小于5,提交,出现如图框
数据库
启动mysql后,使用原用户名密码进行登陆,进入命令行式的mysql界面,建立新用户
建立新的数据库,并在新数据库里建立一张新表
在新表中添加2条信息后,如图展现现表的内容
编写可以链接mysql数据库中刚创建的那种新表,且能够判断是否为合法用户的php代码(这里使用的是老师指导上的php代码)
使用已存在的用户名密码进行登陆(这里都是使用的GET模块登陆)
使用错误密码登陆
输入如图显示的用户名,便可登录成功(但这与所写的php代码有关,这里之因此能够成功是由于判断是不是合法用户,是直接用sql语句寻找是否有符合条件的,而后依据返回的行是否大于0,大于0则成功)
若是咱们改动一下php代码,sql语句不变,将判断条件该为返回的行是否等于1(由于若是真的在用户表中能够找到符合条件的用户与密码,那么返回的行数必定为1,而若是是像上图输入用户名,则sql语句执行之后的结果是用户表里的总行数,只要用户表里的注册用户不是只有1位,那么这种sql注入就会成为无效的)
固然,上面改动的php并不彻底保险,毕竟万一用户表中就是只有1个用户呢?因此咱们还能够改代码,将sql语句改变一下,变成select用户表中的全部信息,在判断条件上变成对select所获得的信息进行索引判断是否有用户名与密码同时对应的,有的话则返回登陆成功,无的话则登陆失败
使用insert语句输入用户名框,方法同单句sql同样,将username变为空,注释掉密码判断条件(但这里一样须要更改下php代码,由于多句注入要使用multi_query才能够)
打开mysql中php链接使用的用户表,发现确实成功添加了新用户
咱们能够将php代码简单改下,还原成之前的php,即将multi_query改成之前的query,成功!