(因爲圖片比較大,看的時候須要關閉側邊欄~)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至關方便,省去了不少麻煩