用戶輸入驗證是Web應用安全的第一道防線。若僅依賴簡單字符串比對,駭客極易通過SQL注入(如' OR '1'='1)繞過鑑權。本文通過一個完整的JSP登錄示例,演示如何利用正則表達式嚴格限制輸入字符集,有效阻斷注入攻擊。
驗證規則極簡單:用戶名與密碼僅允許a-z、A-Z、0-9。對應的正則表達式為[^0-9A-Za-z]——即「匹配任一非字母數字字符」。若匹配成功,則輸入非法。
<%@ 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"。此為「拋磚引玉」級示例。生產環境應結合:
正則表達式雖小,卻是輸入檢查的基石。掌握其核心語法,能為應用穿上堅實的「數據鋼甲」。