目录javascript
理解HTML,学会Web前端、Web后端和数据库编程及SQL注入、XSS攻击测试
教程php
使用service apache2 start
启动Apache。使用netstat -aptn
查看端口信息,看到80端口被Apache2监听,启动成功
html
若是有其余应用有端口冲突,能够修改ports.conf前端
对Apache进行测试:打开网页127.0.0.1:80
可打开上次实验克隆的网页,在Apache的工做目录下/var/www/html
编辑一个测试文件,咱们就能够只在在网页打开看到了
java
编写一个简单网页,包含一个表单,输出用户名、密码而后提交,提交以后会跳转到“login.php”mysql
在Apache的工做目录下新建一个html文件并经过浏览器打开
linux
GET | POST |
---|---|
可被缓存 | 不会被缓存 |
保留在浏览器历史记录中 | 不会保留在浏览器历史记录中 |
可被收藏为书签 | 不能被收藏为书签 |
对数据有长度限制 | 对数据没有长度限制 |
function submit() { if(document.form.password.value=="" || document.form.username.value=="") { alert("please input your name!"); window.location.href="login.html" } else form.submit(); }
前端的设计告一段落,接下来就要处理咱们从网页上提交的数据了,这里咱们使用MySQL来处理数据git
启动MySQL:直接运行/etc/init.d/mysql start
开启MySQL服务就能够
web
登陆数据库:mysql -u root -p
,密码为p@ssw0rd
,直接复制粘贴进去就行
sql
用show databases;
查看数据库基本信息注意这里每一个sql语句要以分号为结尾
输入use mysql;选择使用mysql这个数据库
输入select user, password, host from user;查看当前用户信息
更新权限flush privileges;
退出quit;
再使用新密码从新登陆mysql -u root -p
,用咱们更改修改的密码就能够了
使用create databases `数据库名`;
建立一个名为tky的数据库,使用show databases;
能够看到建立成功
使用咱们刚刚建立的数据库use tky
create table 表名 (字段1,字段2 ···);
,建立数据表。
create table user (username VARCHAR(20),password VARCHAR(20))
;insert into 表名 values('数值1''数值2''···');
添加数据
insert into user values('20165230','5230');
向表中username password两个字段插入数据,即用户名为20165230,密码为5230建立一个新用户便于后面的实验,给新用户提供全部的权限grant all privileges on 数据库名.* to 用户名@localhost identified by '密码';
,更新权限flush privileges;
并退出
重复上面的步骤,建数据库、建表、插入数据。值得注意的是,咱们在以前只为新用户的某个具体的数据库分配了权限,所以这里只能建立名字和前面同样的数据库,若是想要建立新的数据库,能够按照这里的[教程]先建立用户、建立数据库再分配权限。
sudo apt-get install php
安装在工做目录下编写测试文件
<?php include($_GET["a"]); ?>
浏览器打开 127.0.0.1:80/test.php?a=/etc/passwd可看到/etc/passwd文件的内容,以下图所示
注:若是想这里测试成功,首先须要保证apache成功开启(service apache2 start)
编写获取表单数据,myspli的参数分别为本机IP地址、用户名、密码、数据库名
在网页输入同户名和密码,能够看到成功链接到数据库
SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认做正常SQL指令后正常执行,可能实现对后台数据库进行各类操做,甚至形成破坏后台数据库等严重后果。
输入框中键入'or 1=1 --
而且提交,能够看到链接成功。这是由于此时查询语句为select * from users where name='' or 1=1 --'and password='1';
而“--”在MySQL表明注释,查询语句实际为select * from users where name='' or 1=1
1=1为永真式,则这个条件恒成立,所以数据库不会报错
攻击成功!
if ($result = $mysqli->query($query_str))
是不容许输入多条查询语句的,现实生活中也应该是不容许的,但这里为了实验咱们须要代码能容许输入多条查询语句。if ($result = $mysqli->multi_query($query_str))
,在登陆界面输入';insert into user values('tky','tky');--
能够看到虽然登陆失败,但咱们已经在表中插入了一个新用户
这时,咱们要将代码改回原来的,再使用新的用户名和密码就能够登陆了
咱们平常接触的网页都是不容许输入多条查询语句的,并且为了不网页遭受SQL注入,在编写后端php网页的时候就要注意将查询语句分开,或者对输入的字符串进行处理,去掉注释符等特殊符号,这样才能使网页更安全。
XSS就是在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。
<img src="login.png " />
,读取/var/www/html目录下的图片此次实验在本来的网页编程基础上增长了不少如php、数据库链接的功能,让咱们直观地体会到一个网站运行的过程当中参数的传递和应用,更明白网页攻击的原理与过程。作此次实验的过程当中想到了不少以前使用过的漏洞,要想作一个彻底安全的网页要考虑不少,数据库参数的链接、字符串等都要进行一些特殊的处理才能真正达到安全的须要。