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

安全性測驗:測試您的安全性 IQ (四) Session ID 與登入資訊洩露

     編輯:關於C語言

錯誤 #8:可預測的 Session ID (C#)


public class CustomSessionIDManager : SessionIDManager
{
    private static object lockObj = new object();
    public override string CreateSessionID(HttpContext context)
    {
        lock (lockObj)
        {
            int? last = (int?)context.Application["LastSessionId"];
            if (last == null) last = 1; else last++;
            context.Application["LastSessionId"] = last;
            return last.ToString();
        }
    }
}

問題

  1. 伺服器陣列不安全:HttpContext.Application 不在伺服器間共享,Web Farm 部署會導致 Session ID 衝突。
  2. 可預測的連續整數:攻擊者觀察到 Session ID 為 100,即可嘗試 99、98 等劫持其他用戶 Session。應使用 GUID 或大範圍隨機字串。

錯誤 #9:登入失敗資訊過度洩露 (C#)


bool Login(string user, string pass, SqlConnection conn, out string errMsg)
{
    var cmd = new SqlCommand("SELECT PassWord FROM UserAccount WHERE Username=@user", conn);
    cmd.Parameters.Add(new SqlParameter("@user", user));
    string validPass = (string)cmd.ExecuteScalar();
    if (validPass == null) { errMsg = "Invalid user name"; return false; }
    else if (validPass != pass) { errMsg = "Incorrect passWord"; return false; }
    else { errMsg = ""; return true; }
}

問題

  1. 資訊洩露:區分「用戶不存在」與「密碼錯誤」協助攻擊者枚舉有效帳號。應統一回傳「用戶名或密碼無效」。
  2. 明文儲存密碼:資料庫應儲存鹽化雜湊值,而非明文。

評分標準

15+ 分:安全專家級;11-14:優秀;7-10:合格;4-6:需加強;0-3:建議暫離鍵盤。

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