Skip to content

Commit ab1cd7b

Browse files
committed
Make sure session from session cookie matches psid
1 parent 19f8694 commit ab1cd7b

File tree

3 files changed

+6
-1
lines changed

3 files changed

+6
-1
lines changed

src/main/java/smithereen/SmithereenApplication.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,12 @@ public static void main(String[] args){
235235
SessionInfo info=sessionInfo(request);
236236
if(info!=null && info.account!=null){
237237
info.account=UserStorage.getAccount(info.account.id);
238+
String psid=request.cookie("psid");
238239
if(info.account==null){
239240
response.removeCookie("/", "psid");
240241
request.session().invalidate();
242+
}else if(!Objects.equals(psid, info.persistentSessionID)){
243+
request.session().invalidate();
241244
}else{
242245
info.permissions=SessionStorage.getUserPermissions(info.account);
243246

@@ -250,7 +253,7 @@ public static void main(String[] args){
250253
info.ip=ip;
251254
BackgroundTaskRunner.getInstance().submit(()->{
252255
try{
253-
SessionStorage.setLastActive(info.account.id, request.cookie("psid"), info.account.lastActive, ip, ua, uaHash);
256+
SessionStorage.setLastActive(info.account.id, psid, info.account.lastActive, ip, ua, uaHash);
254257
}catch(SQLException x){
255258
LOG.warn("Error updating account session", x);
256259
}

src/main/java/smithereen/model/SessionInfo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class SessionInfo{
1717
public UserPermissions permissions;
1818
public long userAgentHash;
1919
public InetAddress ip;
20+
public String persistentSessionID;
2021

2122
public static class PageHistory{
2223
public ArrayList<String> entries=new ArrayList<>();

src/main/java/smithereen/storage/SessionStorage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ record SessionRow(int accountID, InetAddress ip, long uaHash){}
119119
info.csrfToken=Utils.csrfTokenFromSessionID(sid);
120120
info.ip=sr.ip;
121121
info.userAgentHash=sr.uaHash;
122+
info.persistentSessionID=psid;
122123
if(info.account.prefs.locale==null){
123124
Locale requestLocale=req.raw().getLocale();
124125
if(requestLocale!=null){

0 commit comments

Comments
 (0)