Classic ASP 使用 JScript (Microsoft 實作的 JavaScript) 撰寫伺服器端邏輯,搭配前端 AJAX 送出帳密,後端查詢資料庫驗證。
<%@ Language="JScript" %>
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>登入</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head><body>
<input type="text" id="username" placeholder="帳號">
<input type="password" id="password" placeholder="密碼">
<button id="btnLogin">登入</button>
<script>
$('#btnLogin').click(function() {
const name = $('#username').val();
const pwd = $('#password').val();
if (!name || !pwd) return alert('請輸入帳號密碼');
$.post('verify.asp', { userName: name, passWord: pwd }, function(data) {
if (data.trim() === 'ok') {
alert('登入成功');
location.href = 'main.asp';
} else {
alert('登入失敗:' + data);
}
});
});
</script>
</body></html>
<%@ Language="JScript" %>
<%
// 取得 POST 參數
var name = Request.Form("userName");
var pwd = Request.Form("passWord");
if (!name || !pwd) {
Response.Write("參數缺失");
Response.End();
}
// 建立資料庫連線 (範例使用 SQL Server + ADO)
var conn = Server.CreateObject("ADODB.Connection");
var connStr = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=MyDB;User Id=sa;Password=yourpass;";
conn.Open(connStr);
// 參數化查詢防止 SQL Injection
var cmd = Server.CreateObject("ADODB.Command");
cmd.ActiveConnection = conn;
cmd.CommandText = "SELECT COUNT(*) FROM Users WHERE Username=? AND Password=?";
cmd.CommandType = 1; // adCmdText
// 建立參數
var param1 = cmd.CreateParameter("@username", 200, 1, 50, name); // adVarChar, adParamInput
var param2 = cmd.CreateParameter("@password", 200, 1, 50, pwd);
cmd.Parameters.Append(param1);
cmd.Parameters.Append(param2);
var rs = cmd.Execute();
var count = rs(0).Value;
rs.Close();
conn.Close();
if (count > 0) {
Response.Write("ok");
// 實際專案應建立 Session
// Session("UserName") = name;
} else {
Response.Write("帳號或密碼錯誤");
}
%>
BCrypt、PBKDF2 或 Argon2 雜湊值,驗證時比對雜湊。ADODB.Command + CreateParameter,絕對不可字串拼接 SQL。<%@ Language="JScript" %>
<%
var oldPwd = Request.Form("oldPassword");
var newPwd = Request.Form("newPassword");
var user = Session("UserName"); // 假設已登入
var conn = Server.CreateObject("ADODB.Connection");
conn.Open(connStr);
var cmd = Server.CreateObject("ADODB.Command");
cmd.ActiveConnection = conn;
cmd.CommandText = "UPDATE Users SET Password=? WHERE Username=? AND Password=?";
cmd.CommandType = 1;
cmd.Parameters.Append(cmd.CreateParameter("@new", 200, 1, 50, hash(newPwd)));
cmd.Parameters.Append(cmd.CreateParameter("@user", 200, 1, 50, user));
cmd.Parameters.Append(cmd.CreateParameter("@old", 200, 1, 50, hash(oldPwd)));
var affected = 0;
cmd.Execute(affected);
conn.Close();
Response.Write(affected > 0 ? "ok" : "舊密碼錯誤");
function hash(pwd) {
// 實際應呼叫伺服器端 BCrypt 元件或 COM 物件
return pwd; // 示意
}
%>
Classic ASP 雖屬舊技術,若維護既有系統,仍需遵循參數化查詢、密碼雜湊、HTTPS 等安全基準。