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

JScript (Classic ASP) 後端驗證使用者帳密

     編輯:程式設計綜合問答

架構說明

Classic ASP 使用 JScript (Microsoft 實作的 JavaScript) 撰寫伺服器端邏輯,搭配前端 AJAX 送出帳密,後端查詢資料庫驗證。

前端頁面 (login.asp)

<%@ 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>

後端驗證 (verify.asp)

<%@ 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("帳號或密碼錯誤");
}
%>

關鍵安全提醒

  1. 密碼不可明文儲存:資料庫應存 BCrypt、PBKDF2 或 Argon2 雜湊值,驗證時比對雜湊。
  2. 使用參數化查詢:範例已示範 ADODB.Command + CreateParameter,絕對不可字串拼接 SQL。
  3. HTTPS 傳輸:生產環境必須啟用 SSL,防止帳密明文竊聽。
  4. 錯誤訊息不洩露細節:統一回傳「帳號或密碼錯誤」,避免用戶枚舉。
  5. Classic ASP 已停止主流支援:新專案強烈建議遷移至 ASP.NET Core、Node.js、PHP 等現代框架。

修改密碼邏輯 (changepwd.asp)

<%@ 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 等安全基準。

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