浏览器只看得懂html、css、js、xml等语言,像其余的服务器端动态脚本,如php、jsp等的解析工做是在服务器完成的。javascript
目前,最经常使用的三种动态网页语言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。php
三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操做仅在对JSP页面的第一次请求时发生。在ASP、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的HTML页面只依赖于Web服务器,而ASP、PHP、JSP页面须要附加的语言引擎分析和执行程序代码。程序代码的执行结果被从新嵌入到HTML代码中,而后一块儿发送给浏览器。ASP、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不须要任何附加的软件支持。css
返回目录html
1.安装阿帕奇时出现没法得到锁错误“E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)”
前端
ps -A | grep apt
查看有哪些进程与“apt”有关sudo apt-get install apache2
,第二次运行就能够了。2.运行service apache2 start
开启阿帕奇时再次出错:
java
journalctl -xe
查看具体的错误缘由以下:netstat -tupln | grep 80
查看Local Address中Listening 80的应用的PID, 去任务管理器中找到对应的进程,而后用kill processID(进程ID)
关闭此进程便可,再次开启Apache再也不有错误提示,以下图所示:【注】:这里也能够经过修改配置文件的方法,把Apache的默认端口从80改成其余的未被占用的端口。mysql
3.运行netstat -aptn
后,发现了正在使用端口80的Apache2,说明开启成功:web
4.下面进行两个测试,看看Apache工做是否正常:sql
127.0.0.1:80
127.0.0.1:80/20155312/login.html
8.接下来进行前端编程,我只把Eclipse中的登陆界面代码修改了两个地方:数据库
<form action="login.php" method="post" >
,具体php文件怎么写,咱们面再详细介绍。三要注意添加javascript的相关代码,个人代码实现了利用javascript检查用户名或密码是否为空,若为空则弹出提示框并从新跳转回登陆界面:
注:若要按登陆按钮先调用本身编写的函数,必定要将登陆按钮的type设置为button而非submmit,如type = "button"
不然,会出现出现警告框点肯定后,没法跳转到指定界面的错误。
个人前端代码以下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陆页面</title> <script language="javascript"> var movingID=null; var scrolling=false; function startMove() { var left=eval(bear.style.left.replace("px","")); if(left <document.body.scrollWidth-400) bear.style.left=left+1; else bear.style.left=1; movingID=setTimeout("startMove()",0.1); } function mysubmit() { if(document.form1.password.value=="" || document.form1.username.value=="") { alert("用户名、密码不能为空!"); window.location.href="login.html" } else form1.submit(); } </script> <style type="text/css"> a:link{color:#41506D;font-size:125%;text-decoration:none} a:visited{color:#41506D;font-size:125%;text-decoration:none} a:hover{color:#FFF200;font-size:125%;text-decoration:none} </style> </head> <body onload="startMove()" style="background-image: url(./login.png);background-repeat:no-repeat;topmargin:60;leftmargin:12 ;overflow-x:hidden;overflow-y:scroll;" > <br><br><br> <p align="right"> <a target=_parent href="index.jsp" >登 录</a> <a target=_parent href="addone.jsp" >注 册</a> </p> <form action="login.php" method="post" name="form1"> <table style="background: url(./登陆.png);background-repeat:no-repeat;position:relative;left:300px;top:0px;border-collapse:collapse;"> <tr><th style="border:5px solid white;height:50px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;font-size:150%;font-family:Microsoft YaHei UI;"> 帐 号 密 码 登 录 </th></tr> <tr> <td style="border:5px solid white;height:180px;width:230px;padding:0px;text-align:center;vertical-align:center;color:#41506D;"> <p style="position:absolute;left:27px;top:50px;font-size:130%;color:white;font-family:Microsoft YaHei UI;">用户名 </p> <input align="center" type="text" name = "username" style="position:absolute;left:100px;top:70px;height:35px;width:100px;font-size:130%;"/> <br><br> <p style="position:absolute;left:27px;top:100px;font-size:130%;color:white;font-family:Microsoft YaHei UI;">密 码 </p> <input align="center" type="password" name = "password" style="position:absolute;left:100px;top:120px;height:35px;width:100px;font-size:130%;"> <br> <input type = "button" value = "提交" onClick="mysubmit()" style="position:absolute;left:50px;top:190px;height:35px;width:150px;font-size:120%;"> </td> </tr> </table></form> <div id="bear" style="visibility:visible;position:absolute;left:1px;top:330px;z-index:1;width:400px;height:170px;overflow-x:hidden;overflow-y:hidden;"> <img src="./北极熊2.png"> <img src="./北极熊3.png"> </div> </body> </html>
9.下载安装php并进行测试
sudo apt-get install php
<?php include($_GET["a"]); ?>
127.0.0.1:80/test.php?a=/etc/passwd
可看到/etc/passwd文件的内容,以下图所示。service apache2 start
)10.后台php编程,因为后台编程涉及到数据库名称和具体的字段名称,因此先进行后续的数据库操做,再回头编写后台。
11.安装MySQL,执行指令apt-get install mysql-server mysql-client mysql-workbench
后,安装失败,提示“Package mysql-client is not available, but is referred to by another package”,以下图所示:
sudo apt-get -y update
、运行apt-get update
和apt-get upgrade
都没有解决问题。猜想老师的虚拟机已经下载好了mysql。service start/stop/restart mysql
也不行,最终运行`/etc/init.d/mysql start
开启MySQL服务就能够了……12.开启mysql后,先登陆root用户,密码是p@ssw0rd
直接复制粘贴就好,不要尝试本身输入了,我试了p@ssw0rd,p@sswOrd都不行,不知道咋回事
13.用show databases;
查看数据库基本信息,注意这里每一个sql语句要以分号为结尾,否则就会像我这样:
14.输入use mysql;
选择使用mysql这个数据库
15.输入select user, password, host from user;
查看当前用户信息
16.输入update user set password=PASSWORD("新密码") where user='root';
更改密码
17.输入flush privileges;
更改权限
18.输入exit
退出,而后使用新密码从新登陆mysql -u root -p
19.输入create database 数据库名称;
建立数据库,注意这里数据库名字不能够是学号这些数字,不然会出现我这样的错误,用英文吧~
20.输入show databases;
查看存在的数据库;输入use zjy
使用刚建立的数据库zjy。
21.输入create table user (username VARCHAR(20),password VARCHAR(20));
建立一个名为user的数据表,表中包含VARCHAR类型的两个字段:username和password
22.输入show tables;
查看全部的表,能够发现刚刚新建的user
23.输入insert into user values('20155312','1234');
向表中username password两个字段插入数据,即用户名为20155312,密码为1234
24.输入grant select,insert,update,delete on zjy.* to zjy@localhost identified by "20155312";
将对某数据库的全部表的select,insert,update,delete权限授予当前主机localhost登陆的用户zjy,2015312是登陆密码,注意加引号。
25.输入输入exit
退出,而后使用新密码从新登陆zjy用户mysql -u zjy -p
登陆成功,说明用户建立成功。
26.如今开始后台编程,编写login.php,注意要与前端action指定的php名称对应,具体代码以下:
<?php $uname=$_POST["username"]; $pwd=$_POST["password"]; echo $uname; $query_str="SELECT * FROM user where username='$uname' and password='$pwd';"; $mysqli = new mysqli("127.0.0.1", "zjy", "20155312", "zjy"); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } echo "connection ok!"; /* Select queries return a resultset */ if ($result = $mysqli->query($query_str)) { if ($result->num_rows > 0 ){ echo "<br> Welcome login Mr/Mrs:{$uname} <br> "; } else { echo "<br> login failed!!!! <br> " ; } /* free result set */ $result->close(); } $mysqli->close(); ?>
登陆成功以下图所示:
输入一个数据库中根本没有的用户名和密码,显示链接数据库成功,但登陆失败
27.接下来进行SQL注入攻击,在用户名输入框中输入' or 1=1#
,密码随便输入,是能够登录成功的。
' or 1=1#
提交到后台后,被做为SQL语句中的第一个参数填入,使SQL语句变成select * from users where username='' or 1=1#' and password=''
,#
至关于注释符,会把后面的内容都注释掉,而1=1是永真式,因此这个条件永远成立,因此可以成功登录。所以,要想避免SQL注入,应当限制用户在用户名中输入'
、#
等特殊符号。28.尝试经过SQL注入新建用户名和密码并保存在数据库中,这样下次用本身偷偷新建的用户名密码登陆便可。
if ($result = $mysqli->query($query_str))
改成if ($result = $mysqli->multi_query($query_str))
使其容许一次执行多个SQL语句29.用户名除输入';insert into users values('20155333','111');#
为个人室友偷偷建一个用户,用户名20155333,密码111
'
的存在,该语句被拆成了如下两个SQL语句,第一个语句虽然会致使登陆失败,但第二个添加了一个用户数据。
#
把后面的都注释掉了,因此无论密码输入什么按道理都不影响咱们能够查看一下本地数据,看看有没有增长什么
结果并无成功,为何呢????我也不知道哎
30.接下来尝试进行XSS攻击即跨站脚本攻击,首先将一张图片login.png 存入/var/www/html目录
31.在用户名输入框中输入<img src="login.png " />balabala</a>
读取/var/www/html目录下的图片
运行结果以下所示,正确显示了网页背景图:
本次实验,我最大的体会就是,网络对抗这门课是个综合性很强的课程,能够与不少咱们学过或正在学习的课程融通,好比上学期的网络安全编程基础,和这学期的信息系统安全等,关于网页编程和数据库的知识,确实打下了基础后进行跨平台学习也会相对容易,就像学会了c语言再学其余语言时也会节省很多力气。因此,我以为既然学一门课就要学好、弄懂,若是只是浮于表面,或是最后应付一个考试,可能真的等到毕业后就都忘记了。