小博老師解析Java核心技術點 ——表單令牌(一)

[理論知識]html

咱們在網站開發的過程當中,常常須要會使用到form表單,表單提供了豐富的客戶端與服務器端交互的控件。可是在開發過程當中,咱們須要注意表單的各方面安全性問題,好比防止客戶繞開表單向服務器發送請求(這是一個很危險的現象)。jquery

在咱們學習過的技術中,有不少技術都是爲了確保表單的安全性,好比驗證碼技術(雖然它是一個對於普通用戶很不友好的東西)。小程序

在本系列文章中,小博老師就爲你們講解表單安全性的另外一個技術——表單令牌(Token)。瀏覽器

[步驟解讀一]令牌表單安全

相信你們對於普通form表單與服務器的交互已經很是熟悉了,小博老師這裏就不浪費篇幅多作介紹了,咱們新建一個jsp文件提供用戶填寫信息的表單,核心代碼以下:服務器

<form action="BWFToken" method="POST">jsp

帳戶名稱:<input type="text" name="username"/><br/><br/>post

帳戶密碼:<input type="password" name="userpass"/><br/><br/>學習

<input type="submit" value="登  錄"/>網站

</form>

而後咱們再建立一個Servlet來接受表單提交的數據,核心代碼以下:

@WebServlet("/BWFToken")

public class BWFTokenServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

 

PrintWriter out = response.getWriter();

String username = request.getParameter("username");

String userpass = request.getParameter("userpass");

 

out.println("username="+username+",userpass="+userpass);

}

}

這樣,咱們經過瀏覽器訪問jsp頁面,效果以下:


 

填寫帳戶名稱和帳戶密碼,提交給Servlet後,效果以下:

 

 

[步驟解讀二]用戶繞開表單

以上是一個最普通的表單和服務器交互的案例,這樣的表單是存在必定風險的,用戶徹底能夠繞開表單直接向服務器發送請求。

首先咱們訪問jsp頁面,而後在瀏覽器中右鍵、查看源代碼,結果以下:

 

從源代碼中用戶能夠獲得幾個關鍵信息。action="BWFToken",這個屬性結合上當前jsp頁面的url,用戶能夠得知服務器接收表單提交數據的url爲「http://127.0.0.1:8090/BWF-JavaEE/BWFToken」。method="POST",從這個屬性用戶能夠得知表單提交的方式爲POST請求。<input type="text" name="username"/>和<input type="password" name="userpass"/>,這兩個表單控件的源代碼告訴了用戶,該表單向服務器提交了兩個參數信息,其key分別爲username和userpass。

結合以上信息,用戶能夠輕鬆本身編寫一個任意形式的小程序,繞開表單直接向服務器的Servlet發送請求。這種小程序能夠是一個Applet,也能夠是一個html頁面,甚至是一個Ajax等等。

好比,小博老師爲你們演示一下使用Ajax技術繞開表單直接向服務器的Servlet發送請求,核心代碼以下:

<body>

<script src="script/jquery-1.4.2.min.js"></script>

<script>

$(document).ready(function(){

var username = "attacter";

var userpass = "crack";

$.post(

"http://127.0.0.1:8090/BWF-JavaEE/BWFToken",

"username="+username+"&userpass="+userpass,

function(data){

alert(data);

}

);

});

</script>

</body>

咱們使用瀏覽器訪問該頁面,效果以下:

 

相關文章
相關標籤/搜索