(因为图片比较大,看的时候须要关闭侧边栏~)javascript
(1)Web前端HTML(0.5分)php
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。html
(2)Web前端javascipt(0.5分)前端
理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。java
(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、建立用户、修改密码、建表(0.5分)mysql
(4)Web后端:编写PHP网页,链接数据库,进行用户认证(0.5分)web
(5)最简单的SQL注入,XSS攻击测试(0.5分)sql
<form>
元素定义 HTML 表单input
元素、复选框、单选按钮、提交按钮等等<input>
元素是最重要的表单元素,<input>
元素有不少形态,根据不一样的 type
属性:
text
:定义常规文本输入radio
:定义单选按钮输入(选择多个选择之一)submit
:定义提交按钮(提交表单)<select>
元素定义下拉列表<option>
元素定义待选择的选项<textarea>
元素定义多行输入字段(文本域)<button>
元素定义可点击的按钮GET
和 POST
GET
:从指定的资源请求数据,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
POST
:向指定的资源提交要被处理的数据,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
httpd -v
查看Apache服务sudo apachectl start
以开启Apache服务http://127.0.0.1
或http://localhost
,若是出现下面的界面就表示Apache服务能够正常使用/Library/WebServer/Documents
sudo apachectl stop
以关闭Apache服务输入sudo apachectl restart
以重启Apache服务数据库
或者使用xampp开启Apache服务,这个比较方便
apache
<form>
元素定义 HTML 表单input
元素、复选框、单选按钮、提交按钮等等<input>
元素是最重要的表单元素,<input>
元素有不少形态,根据不一样的 type
属性:
text
:定义常规文本输入radio
:定义单选按钮输入(选择多个选择之一)submit
:定义提交按钮(提交表单)<select>
元素定义下拉列表<option>
元素定义待选择的选项<textarea>
元素定义多行输入字段(文本域)<button>
元素定义可点击的按钮GET
:从指定的资源请求数据,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
POST
:向指定的资源提交要被处理的数据,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!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=gb2312"> <title>登录页面</title> </head> <body background="img/login.jpg"> <h1 align="center" >登录界面</h1><br> <div style="text-align: center"> <form action="login" method="post"> 用户名 <input type="text" name = "username" /> <br><br> 密码 <input type="password" name = "password"> <br> <input type = "submit" value = "提交"> </form> </div> </body> </html>
<script language="javascript"> function check(){ var sUserName = document.form_login.username.value ; var sPassword = document.form_login.password.value ; if ((sUserName =="") || (sUserName=="Your email")){ alert("User Email!"); return false ; } if ((sPassword =="") || (sPassword=="Your password")){ alert("Password!"); return false ; } } </script>
package servlet; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javabean.DBUtil; public class LoginServlet implements javax.servlet.Servlet { @Override public void destroy() { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void init(ServletConfig arg0) throws ServletException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, InstantiationException, IllegalAccessException { String userName = request.getParameter("username"); String password = request.getParameter("password"); DBUtil db = new DBUtil(); boolean canLogin = db.loginSuccess(userName, password); if (canLogin) { response.sendRedirect("index.jsp"); } else { response.sendRedirect("back.jsp"); } } @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { HttpServletRequest rq = (HttpServletRequest) request; HttpServletResponse rs = (HttpServletResponse) response; try { doPost(rq, rs); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
index.jsp
login.jsp
back.jsp
,若是用户输入错误,会返回以下界面test
的链接user
user_info
lzh
和test
detail
sudo vim /etc/apache2/httpd.conf
#LoadModule php7_module libexec/apache2/libphp7.so
,删除注释(删除前面的#)mac下Apache的默认文件夹为/Library/WebServer/Documents,在该目录下建立一个名为index.php文件,输入命令:sudo vim /Library/WebServer/Documents/index.php
在文件中添加以下内容:
<?php phpinfo(); ?>
index.html.en
和index.html.en~orig
文件,输入命令:sudo rm /Library/WebServer/Documents/index.html.en sudo rm /Library/WebServer/Documents/index.html.en~orig
在Safari中输入127.0.0.1或localhost,出现以下PHP的info页,表示PHP开启成功:
若是不成功,用命令sudo apachectl restart重启Apache
sudo vim /Library/WebServer/Documents/test.php
<?php include($_GET["a"]); ?>
Safari打开127.0.0.1/test.php?a=/etc/passwd
可看到/etc/passwd
文件的内容(PHP变量大小写敏感)
/etc/passwd
文件存放的是操做系统用户信息,该文件为全部用户可见。用户信息记录了由6个分号组成的7个信息,解释以下:
尝试获取表单数据,输入命令: sudo vim /Library/WebServer/Documents/login.php
代码以下:
<!DOCTYPE html> <html> <body> <?php echo "个人第一段 PHP 脚本!"; $uname=($_GET["username"]); $pwd=($_GET["password"]); echo $uname; echo $pwd; ?> </body> </html>
该php的参数是从前面login.html
提交的表单获取的数据
下面的代码是修改以后的
<?php $uname=$_POST["Email"]; $pwd=$_POST["Password"]; echo $uname; $query_str="SELECT * FROM login where username='$uname' and password='$pwd';"; $mysqli = new mysqli("127.0.0.1", "root", "", "user"); $query_str1="use pyx;"; /* 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_str1)) echo"<br>Success into database!"; echo$uname; if ($result = $mysqli->query($query_str)) { if ($result->num_rows > 0 ){ echo "<br> {$uname}:Welcome!!! <br> "; } else { echo "<br> login failed!!!! <br> " ; } /* free result set */ $result->close(); } $mysqli->close(); ?>
' or 1=1#
,密码任意输入,可登录成功:成功登录!
这是因为输入的用户名和咱们的代码中select语句组合起来变成了select * from users where username='' or 1=1#' and password='',#至关于注释符,会把后面的内容都注释掉,而1=1是永真式,因此这个条件永远成立,因此无论密码是否输入正确,都可以成功登录
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种常常出如今web应用中的计算机安全漏洞,它容许恶意web用户将代码植入到提供给其它用户使用的页面中。好比这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞因为被骇客用来编写危害性更大的phishing攻击而变得广为人知
/Library/WebServer/Documents/
目录下在用户名输入框输入<img src="test.png" />
,密码随意,便可读取图片:
本次实验仿照以前网络安全编程,许多问题以前遇到过,并一一解决过
此次实验难度不是很大,主要是以前作过相似的,并且Mac上本身自带的Apache和PHP至关方便,省去了不少麻烦