首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP正則表達式實戰:構建安全的用戶登錄驗證

     編輯:關於JSP

用戶輸入驗證是Web應用安全的第一道防線。若僅依賴簡單字符串比對,駭客極易通過SQL注入(如' OR '1'='1)繞過鑑權。本文通過一個完整的JSP登錄示例,演示如何利用正則表達式嚴格限制輸入字符集,有效阻斷注入攻擊。

核心邏輯:只允許字母數字

驗證規則極簡單:用戶名與密碼僅允許a-z、A-Z、0-9。對應的正則表達式為[^0-9A-Za-z]——即「匹配任一非字母數字字符」。若匹配成功,則輸入非法。

完整代碼實現(bd.jsp)

<%@ page contentType="text/html;charset=gb2312"%>
<%! 
  // 正則驗證方法:返回true表示合法(僅含字母數字)
  private boolean regex(String str) {
    java.util.regex.Pattern p = java.util.regex.Pattern.compile("[^0-9A-Za-z]");
    java.util.regex.Matcher m = p.matcher(str);
    return !m.find(); // 找到非法字符即返回false
  }
%>
<html>
<head><title>用戶登錄驗證示例</title></head>
<body>
  <form action="bd.jsp" method="get">
    <div align="center">
      <font color="#FF0000">僅允許輸入字母、數字</font>
      <table border="1">
        <tr><td bgcolor="yellow">用戶名</td><td><input name="name" type="text" id="name"></td></tr>
        <tr><td bgcolor="yellow">密碼</td><td><input name="pass" type="password" id="pass"></td></tr>
        <tr><td colspan="2" align="center">
          <input type="submit" value="登錄"> <input type="reset" value="重置">
        </td></tr>
        <tr><td colspan="2" align="center">
          <% 
            String name = request.getParameter("name");
            String pass = request.getParameter("pass");
            if (name == null) name = "我是非法的字符"; // 預設非法值觸發提示
            if (pass == null) pass = "我是非法的字符";
            
            if (!regex(name)) {
              out.print("用戶名只能包含字母、數字");
              return; // 阻斷後續執行
            }
            out.print("驗證通過!用戶名:" + name + ",密碼:" + pass);
          %>
        </td></tr>
      </table>
    </div>
  </form>
</body>
</html>

關鍵點解析

  • 預設非法值策略:參數為null時賦予非法字符串,統一走驗證邏輯,避免空指針判斷分散代碼。
  • 編譯模式復用:Pattern.compile()放在方法內,實際生產建議提升為static final常量,避免重複編譯開銷。
  • 密碼框類型:示例用type="text"便於觀察,實戰必須改為type="password"。

擴展建議

此為「拋磚引玉」級示例。生產環境應結合:

  1. 服務端與客戶端雙重驗證(JS即時提示 + JSP二次把關)
  2. 更精細的正則(如長度限制、特殊字符白名單)
  3. 參數化查詢/PreparedStatement徹底杜絕SQL注入
  4. 密碼加密傳輸(HTTPS)與存儲(BCrypt/SCrypt)

正則表達式雖小,卻是輸入檢查的基石。掌握其核心語法,能為應用穿上堅實的「數據鋼甲」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved