mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-05 01:20:25 +08:00
提升登录SESSION安全性
This commit is contained in:
@@ -135,40 +135,16 @@ func (this *LoginSessionDAO) WriteSessionValue(tx *dbs.Tx, sid string, key strin
|
|||||||
sessionOp.UserId = userId
|
sessionOp.UserId = userId
|
||||||
|
|
||||||
if isNewSession {
|
if isNewSession {
|
||||||
// 删除此用户之前创建的SESSION,防止单个用户SESSION过多
|
// 删除此用户之前创建的SESSION,不再保存以往的SESSION,避免安全问题
|
||||||
// TODO 将来改成按照活跃时间排序
|
err = this.Query(tx).
|
||||||
const maxSessionsPerUser = 10
|
|
||||||
oldOnes, err := this.Query(tx).
|
|
||||||
ResultPk().
|
ResultPk().
|
||||||
Attr("adminId", adminId).
|
Attr("adminId", adminId).
|
||||||
Attr("userId", userId).
|
Attr("userId", userId).
|
||||||
Asc("createdAt").
|
Neq("sid", sid).
|
||||||
FindAll()
|
DeleteQuickly()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var countOldOnes = len(oldOnes)
|
|
||||||
if countOldOnes > maxSessionsPerUser {
|
|
||||||
var countDeleted int
|
|
||||||
for _, oldOne := range oldOnes {
|
|
||||||
var oldSessionId = int64(oldOne.(*LoginSession).Id)
|
|
||||||
if oldSessionId == sessionId {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if countDeleted < countOldOnes-maxSessionsPerUser {
|
|
||||||
err = this.Query(tx).
|
|
||||||
Pk(oldSessionId).
|
|
||||||
DeleteQuickly()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
countDeleted++
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,6 +106,9 @@ var upgradeFuncs = []*upgradeVersion{
|
|||||||
{
|
{
|
||||||
"1.3.2", upgradeV1_3_2,
|
"1.3.2", upgradeV1_3_2,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"1.3.4", upgradeV1_3_4,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpgradeSQLData 升级SQL数据
|
// UpgradeSQLData 升级SQL数据
|
||||||
@@ -1230,3 +1233,13 @@ func upgradeV1_3_2(db *dbs.DB) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1.3.4
|
||||||
|
func upgradeV1_3_4(db *dbs.DB) error {
|
||||||
|
_, err := db.Exec("DELETE FROM edgeLoginSessions WHERE adminId>0")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,3 +27,26 @@ func TestUpgradeSQLData_v0_5_6(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Log("ok")
|
t.Log("ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestUpgradeSQLData_v1_3_4(t *testing.T) {
|
||||||
|
db, err := dbs.NewInstanceFromConfig(&dbs.DBConfig{
|
||||||
|
Driver: "mysql",
|
||||||
|
Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s",
|
||||||
|
Prefix: "edge",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
_ = db.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = upgradeV1_3_4(db)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log("ok")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user