X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=session.sh;h=0a2a2e8b6583ad95c1d95735de392f9d64e35615;hb=a836764660cf5db4cc02ffd9ea1ddb30aaa432f5;hp=ee5c4993a72df047fe0fc67b3c384f2b5733be48;hpb=f0bc458f738e3171e60424d300b937fdbec2583f;p=cgilite diff --git a/session.sh b/session.sh index ee5c499..0a2a2e8 100755 --- a/session.sh +++ b/session.sh @@ -24,6 +24,14 @@ slopecode(){ ' } +session_mac(){ + if which openssl >/dev/null; then + openssl dgst -sha1 -hmac "$(server_key)" -binary |slopecode + else + { cat; server_key; } |sha256sum |cut -d\ -f1 + fi +} + randomid(){ dd bs=12 count=1 if=/dev/urandom 2>&- \ | slopecode @@ -49,35 +57,32 @@ transid(){ local file="$1" { stat -c %F%i%n%N%s%Y "$file" 2>&- printf %s "$SESSION_ID" - server_key - } | sha256sum | cut -d\ -f1 + } | session_mac } update_session(){ local session sid time sig serverkey checksig IFS=- read -r sid time sig <<-END - $(COOKIE session) + $(POST session_key || COOKIE session) END serverkey="$(server_key)" - checksig="$(printf %s "$sid" "$time" "$serverkey" | sha256sum)" - checksig="${checksig%% *}" + checksig="$(printf %s "$sid" "$time" |session_mac)" if ! [ "$checksig" = "$sig" \ -a "$time" -ge "$_DATE" \ -a "$(printf %s "$sid" |checkid)" ] 2>&- then - debug Setting up new session + debug "Setting up new session" sid="$(randomid)" fi time=$(( $_DATE + $SESSION_TIMEOUT )) - sig="$(printf %s "$sid" "$time" "$serverkey" |sha256sum)" - sig="${sig%% *}" + sig="$(printf %s "$sid" "$time" |session_mac)" printf %s\\n "${sid}-${time}-${sig}" } -SESSION_ID="$(update_session)" -SET_COOKIE 0 session="$SESSION_ID" Path=/ SameSite=Strict HttpOnly -SESSION_ID="${SESSION_ID%%-*}" +SESSION_KEY="$(update_session)" +SET_COOKIE 0 session="$SESSION_KEY" Path=/ SameSite=Strict HttpOnly +SESSION_ID="${SESSION_KEY%%-*}"