ページにTokenを追加して越権アクセスを防止

3463 ワード

1、まずJSPにアクセスしたときに乱数を生成してセッションに入れる.同時にサーバにTokenがキャッシュされます.
2、formがバックグラウンドに着いたら、ツールクラスを呼び出してTokenを検証する.このToken値があることはTokenListで検証され、ある場合は検証が通過し、同時にListのTokenが削除されます.
何年も前に書いたものですが、今ではほぼ前後端が分離して無状態接続になっています.同様に、送信時にtokenを生成してクライアントに戻り、クライアントが報告するにはテープが必要です.
パラメータの改ざんを防ぐには、md 5+encrpytを使用します.
  • まずパラメータを順に並べ、対称AESを用いて暗号化し、ep
  • を得る.
  • 同時にパラメータmd 5に対してmd
  • を得る
  • が報告されると、epは復号され、md 5が同じかどうかを比較するためにmd 5に並べ替えられる.

  • 1.ツールクラスの導入
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    
    
    package com.yiwei.utils;
    
    import java.util.ArrayList;
    
    import javax.servlet.http.HttpSession;
    
    public class Token {
    
    	private static final String TOKEN_LIST_NAME = "tokenList";
    
    	public static final String TOKEN_STRING_NAME = "token";
    
    	private static ArrayList getTokenList(HttpSession session) {
    
    		Object obj = session.getAttribute(TOKEN_LIST_NAME);
    
    		if (obj != null) {
    
    			return (ArrayList) obj;
    
    		} else {
    
    			ArrayList tokenList = new ArrayList();
    
    			session.setAttribute(TOKEN_LIST_NAME, tokenList);
    
    			return tokenList;
    
    		}
    
    	}
    
    	private static void saveTokenString(String tokenStr, HttpSession session) {
    
    		ArrayList tokenList = getTokenList(session);
    
    		tokenList.add(tokenStr);
    
    		session.setAttribute(TOKEN_LIST_NAME, tokenList);
    
    	}
    
    	private static String generateTokenString() {
    
    		return new Long(System.currentTimeMillis()).toString();
    
    	}
    
    	/** */
    	/**
    	 * 
    	 * Generate a token string, and save the string in session, then return the
    	 * token string.
    	 * 
    	 * 
    	 * 
    	 * @param HttpSession
    	 * 
    	 *            session
    	 * 
    	 * @return a token string used for enforcing a single request for a
    	 *         particular transaction.
    	 * 
    	 */
    
    	public static String getTokenString(HttpSession session) {
    
    		String tokenStr = generateTokenString();
    
    		saveTokenString(tokenStr, session);
    
    		return tokenStr;
    
    	}
    
    	/** */
    	/**
    	 * 
    	 * check whether token string is valid. if session contains the token
    	 * string, return true.
    	 * 
    	 * otherwise, return false.
    	 * 
    	 * 
    	 * 
    	 * @param String
    	 * 
    	 *            tokenStr
    	 * 
    	 * @param HttpSession
    	 * 
    	 *            session
    	 * 
    	 * @return true: session contains tokenStr; false: session is null or
    	 *         tokenStr is id not in session
    	 * 
    	 */
    
    	public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
    
    		boolean valid = false;
    
    		if (session != null) {
    
    			ArrayList tokenList = getTokenList(session);
    
    			if (tokenList.contains(tokenStr)) {
    
    				valid = true;
    
    				tokenList.remove(tokenStr);
    
    			}
    
    		}
    
    		return valid;
    
    	}
    
    }
    

    2.JSPページでクラスパッケージをインポートする
    1
    
    
    

    3.JSPページformフォームに非表示ドメインを追加する
    1
    
    
    

    4.バックグラウンド検証Token
    1
    2
    3
    4
    
    if(!Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){
    	responseMessage(response, "    ");
    	return;
    }