From f537c479c9ed55d1cee80906a3ac3bce4133de89 Mon Sep 17 00:00:00 2001 From: edvraa <80588099+edvraa@users.noreply.github.com> Date: Fri, 30 Apr 2021 13:46:06 +0300 Subject: [PATCH] path tracking --- ql/src/experimental/CWE-1004/AuthCookie.qll | 218 ++++++++++---- .../CWE-1004/CookieWithoutHttpOnly.ql | 92 +++--- .../CWE-1004/CookieWithoutHttpOnly.expected | 283 +++++++++++++++++- 3 files changed, 486 insertions(+), 107 deletions(-) diff --git a/ql/src/experimental/CWE-1004/AuthCookie.qll b/ql/src/experimental/CWE-1004/AuthCookie.qll index 8169fa6c831..3d954ef51f6 100644 --- a/ql/src/experimental/CWE-1004/AuthCookie.qll +++ b/ql/src/experimental/CWE-1004/AuthCookie.qll @@ -22,50 +22,10 @@ DataFlow::Node getValueForFieldWrite(StructLit sl, string field) { ) } -/** - * Tracks struct creation without `HttpOnly` to `SetCookie`. - */ -class HttpOnlyCookieTrackingConfiguration extends TaintTracking::Configuration { - HttpOnlyCookieTrackingConfiguration() { this = "HttpOnlyCookieTrackingConfiguration" } - - override predicate isSource(DataFlow::Node source) { - exists(StructLit sl | - source.asExpr() = sl and - sl.getType().hasQualifiedName("net/http", "Cookie") and - ( - not exists(DataFlow::Node rhs | rhs = getValueForFieldWrite(sl, "HttpOnly")) - or - exists(DataFlow::Node rhs | - rhs = getValueForFieldWrite(sl, "HttpOnly") and - rhs.getAPredecessor*().asExpr().getBoolValue() = false - ) and - exists(DataFlow::Node rhs | - rhs = getValueForFieldWrite(sl, "Name") and - isAuthVariable(rhs.getAPredecessor*().asExpr()) - ) - ) - ) - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof SetCookieSink } -} - -/** - * A cookie passed the second parameter to `SetCookie`. - */ -class SetCookieSink extends DataFlow::Node { - SetCookieSink() { - exists(CallExpr c | - c.getTarget().hasQualifiedName("net/http", "SetCookie") and - this.asExpr() = c.getArgument(1) - ) - } -} - /** * Holds if the expression or its value has a sensitive name */ -predicate isAuthVariable(Expr expr) { +private predicate isAuthVariable(Expr expr) { exists(string val | ( val = expr.getStringValue() or @@ -77,10 +37,132 @@ predicate isAuthVariable(Expr expr) { } /** - * Tracks from gorilla cookie store creation to session save. + * A cookie passed as the second parameter to `net/http.SetCookie`. */ -class CookieStoreSaveTrackingConfiguration extends DataFlow::Configuration { - CookieStoreSaveTrackingConfiguration() { this = "CookieStoreSaveTrackingConfiguration" } +private class SetCookieSink extends DataFlow::Node { + SetCookieSink() { + exists(CallExpr c | + c.getTarget().hasQualifiedName("net/http", "SetCookie") and + this.asExpr() = c.getArgument(1) + ) + } +} + +/** + * Tracks `net/http.Cookie` creation to `net/http.SetCookie`. + */ +class NetHttpCookieTrackingConfiguration extends TaintTracking::Configuration { + NetHttpCookieTrackingConfiguration() { this = "NetHttpCookieTrackingConfiguration" } + + override predicate isSource(DataFlow::Node source) { + exists(StructLit sl | + source.asExpr() = sl and + sl.getType().hasQualifiedName("net/http", "Cookie") + ) + } + + override predicate isSink(DataFlow::Node sink) { + sink instanceof SetCookieSink and + exists(NameToNetHttpCookieTrackingConfiguration cfg, DataFlow::Node nameArg | + cfg.hasFlow(_, nameArg) and + sink.asExpr() = nameArg.asExpr() + ) + } +} + +/** + * Tracks sensitive name to `net/http.SetCookie`. + */ +private class NameToNetHttpCookieTrackingConfiguration extends TaintTracking2::Configuration { + NameToNetHttpCookieTrackingConfiguration() { this = "NameToNetHttpCookieTrackingConfiguration" } + + override predicate isSource(DataFlow::Node source) { isAuthVariable(source.asExpr()) } + + override predicate isSink(DataFlow::Node sink) { sink instanceof SetCookieSink } + + override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { + exists(StructLit sl | + sl.getType().hasQualifiedName("net/http", "Cookie") and + getValueForFieldWrite(sl, "Name") = pred and + sl = succ.asExpr() + ) + } +} + +/** + * Tracks `HttpOnly` set to `false` to `net/http.SetCookie`. + */ +class BoolToNetHttpCookieTrackingConfiguration extends TaintTracking::Configuration { + BoolToNetHttpCookieTrackingConfiguration() { this = "BoolToNetHttpCookieTrackingConfiguration" } + + override predicate isSource(DataFlow::Node source) { source.asExpr().getBoolValue() = false } + + override predicate isSink(DataFlow::Node sink) { sink instanceof SetCookieSink } + + override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { + exists(StructLit sl | + sl.getType().hasQualifiedName("net/http", "Cookie") and + getValueForFieldWrite(sl, "HttpOnly") = pred and + sl = succ.asExpr() + ) + } +} + +/** + * Tracks `HttpOnly` set to `false` to `gin-gonic/gin.Context.SetCookie`. + */ +class BoolToGinSetCookieTrackingConfiguration extends DataFlow::Configuration { + BoolToGinSetCookieTrackingConfiguration() { this = "BoolToGinSetCookieTrackingConfiguration" } + + override predicate isSource(DataFlow::Node source) { source.asExpr().getBoolValue() = false } + + override predicate isSink(DataFlow::Node sink) { + exists(CallExpr c | + c.getTarget().getQualifiedName() = "github.com/gin-gonic/gin.Context.SetCookie" and + c.getArgument(6) = sink.asExpr() and + exists(NameToGinSetCookieTrackingConfiguration cfg, DataFlow::Node nameArg | + cfg.hasFlow(_, nameArg) and + c.getAnArgument() = nameArg.asExpr() + ) + ) + } +} + +/** + * Tracks sensitive name to `gin-gonic/gin.Context.SetCookie`. + */ +private class NameToGinSetCookieTrackingConfiguration extends DataFlow2::Configuration { + NameToGinSetCookieTrackingConfiguration() { this = "NameToGinSetCookieTrackingConfiguration" } + + override predicate isSource(DataFlow::Node source) { isAuthVariable(source.asExpr()) } + + override predicate isSink(DataFlow::Node sink) { + exists(CallExpr c | + c.getTarget().getQualifiedName() = "github.com/gin-gonic/gin.Context.SetCookie" and + c.getArgument(0) = sink.asExpr() + ) + } +} + +/** + * A cookie passed the second parameter to `gorilla/sessions.Session.Save`. + */ +private class GorillaSessionSaveSink extends DataFlow::Node { + GorillaSessionSaveSink() { + exists(CallExpr c | + this.asExpr() = c.getCalleeExpr().(SelectorExpr).getBase() and + c.getTarget().getQualifiedName() = "github.com/gorilla/sessions.Session.Save" + ) + } +} + +/** + * Tracks from gorilla cookie store creation to `gorilla/sessions.Session.Save`. + */ +class GorillaCookieStoreSaveTrackingConfiguration extends DataFlow::Configuration { + GorillaCookieStoreSaveTrackingConfiguration() { + this = "GorillaCookieStoreSaveTrackingConfiguration" + } override predicate isSource(DataFlow::Node source) { exists(CallExpr c | @@ -89,12 +171,7 @@ class CookieStoreSaveTrackingConfiguration extends DataFlow::Configuration { ) } - override predicate isSink(DataFlow::Node sink) { - exists(CallExpr c | - sink.asExpr() = c.getCalleeExpr().(SelectorExpr).getBase() and - c.getTarget().getQualifiedName() = "github.com/gorilla/sessions.Session.Save" - ) - } + override predicate isSink(DataFlow::Node sink) { sink instanceof GorillaSessionSaveSink } override predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { exists(Function f, DataFlow::CallNode cn | cn = f.getACall() | @@ -106,10 +183,12 @@ class CookieStoreSaveTrackingConfiguration extends DataFlow::Configuration { } /** - * Tracks session options to session save. + * Tracks session options to `gorilla/sessions.Session.Save`. */ -class SessionOptionsTrackingConfiguration extends TaintTracking::Configuration { - SessionOptionsTrackingConfiguration() { this = "SessionOptionsTrackingConfiguration" } +class GorillaSessionOptionsTrackingConfiguration extends TaintTracking::Configuration { + GorillaSessionOptionsTrackingConfiguration() { + this = "GorillaSessionOptionsTrackingConfiguration" + } override predicate isSource(DataFlow::Node source) { exists(StructLit sl | @@ -118,12 +197,7 @@ class SessionOptionsTrackingConfiguration extends TaintTracking::Configuration { ) } - override predicate isSink(DataFlow::Node sink) { - exists(CallExpr c | - sink.asExpr() = c.getCalleeExpr().(SelectorExpr).getBase() and - c.getTarget().getQualifiedName() = "github.com/gorilla/sessions.Session.Save" - ) - } + override predicate isSink(DataFlow::Node sink) { sink instanceof GorillaSessionSaveSink } override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { exists(Field f, DataFlow::Write w, DataFlow::Node base | @@ -133,3 +207,29 @@ class SessionOptionsTrackingConfiguration extends TaintTracking::Configuration { ) } } + +/** + * Tracks `HttpOnly` set to `false` to `gorilla/sessions.Session.Save`. + */ +class BoolToGorillaSessionOptionsTrackingConfiguration extends TaintTracking::Configuration { + BoolToGorillaSessionOptionsTrackingConfiguration() { + this = "BoolToGorillaSessionOptionsTrackingConfiguration" + } + + override predicate isSource(DataFlow::Node source) { source.asExpr().getBoolValue() = false } + + override predicate isSink(DataFlow::Node sink) { sink instanceof GorillaSessionSaveSink } + + override predicate isAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) { + exists(StructLit sl | + getValueForFieldWrite(sl, "HttpOnly") = pred and + sl = succ.asExpr() + ) + or + exists(Field f, DataFlow::Write w, DataFlow::Node base | + f.getQualifiedName() = "github.com/gorilla/sessions.Session.Options" and + w.writesField(base, f, pred) and + succ = base + ) + } +} diff --git a/ql/src/experimental/CWE-1004/CookieWithoutHttpOnly.ql b/ql/src/experimental/CWE-1004/CookieWithoutHttpOnly.ql index 5b88e9ae83a..e2230112d0c 100644 --- a/ql/src/experimental/CWE-1004/CookieWithoutHttpOnly.ql +++ b/ql/src/experimental/CWE-1004/CookieWithoutHttpOnly.ql @@ -4,7 +4,7 @@ * malicious JavaScript to steal it in case of XSS vulnerability. Always set * 'HttpOnly' to 'true' to authentication related cookie to make it * not accessible by JavaScript. - * @kind problem + * @kind path-problem * @problem.severity warning * @precision high * @id go/cookie-httponly-not-set @@ -14,46 +14,64 @@ import go import AuthCookie +import DataFlow::PathGraph -predicate isNetHttpCookieFlow(Expr expr) { - exists( - HttpOnlyCookieTrackingConfiguration httpOnlyCfg, DataFlow::Node source, SetCookieSink sink - | - httpOnlyCfg.hasFlow(source, sink) and - sink.asExpr() = expr - ) -} - -predicate isGinContextCookieFlow(Expr expr) { - exists(CallExpr c | - c.getTarget().getQualifiedName() = "github.com/gin-gonic/gin.Context.SetCookie" and - c.getArgument(6) = expr and - exists(DataFlow::Node httpOnlyArg | - httpOnlyArg.asExpr() = c.getArgument(6) and - httpOnlyArg.getAPredecessor*().asExpr().getBoolValue() = false - ) and - exists(DataFlow::Node nameArg | - nameArg.asExpr() = c.getArgument(0) and - isAuthVariable(nameArg.getAPredecessor*().asExpr()) +predicate isNetHttpCookieFlow(DataFlow::PathNode source, DataFlow::PathNode sink) { + exists(DataFlow::PathNode cookieCreate, DataFlow::PathNode setCookieSink | + exists(NetHttpCookieTrackingConfiguration cfg | cfg.hasFlowPath(cookieCreate, setCookieSink)) and + ( + not exists(DataFlow::Node rhs | + rhs = getValueForFieldWrite(cookieCreate.getNode().asExpr(), "HttpOnly") + ) and + source = cookieCreate and + sink = setCookieSink + or + exists(BoolToNetHttpCookieTrackingConfiguration cfg, DataFlow::PathNode setCookieSink2 | + cfg.hasFlowPath(source, setCookieSink2) and + setCookieSink2.getNode() = setCookieSink.getNode() and + sink = setCookieSink2 + ) ) ) } -predicate isGorillaSessionsCookieFlow(Expr expr) { - exists(DataFlow::Node sessionSave | - sessionSave.asExpr() = expr and - exists(CookieStoreSaveTrackingConfiguration cfg | cfg.hasFlow(_, sessionSave)) and +predicate isGinContextCookieFlow(DataFlow::PathNode source, DataFlow::PathNode sink) { + exists(BoolToGinSetCookieTrackingConfiguration cfg | cfg.hasFlowPath(source, sink)) +} + +predicate isGorillaSessionsCookieFlow(DataFlow::PathNode source, DataFlow::PathNode sink) { + exists(DataFlow::PathNode cookieStoreCreate, DataFlow::PathNode sessionSave | + exists(GorillaCookieStoreSaveTrackingConfiguration cfg | + cfg.hasFlowPath(cookieStoreCreate, sessionSave) + ) and ( - not exists(SessionOptionsTrackingConfiguration cfg | cfg.hasFlow(_, sessionSave)) + not exists(GorillaSessionOptionsTrackingConfiguration cfg, DataFlow::PathNode sessionSave2 | + sessionSave2.getNode() = sessionSave.getNode() and + cfg.hasFlowPath(_, sessionSave2) + ) and + source = cookieStoreCreate and + sink = sessionSave or - exists(SessionOptionsTrackingConfiguration cfg, DataFlow::Node options | - cfg.hasFlow(options, sessionSave) and + exists( + GorillaSessionOptionsTrackingConfiguration cfg, DataFlow::PathNode options, + DataFlow::PathNode sessionSave2 + | + cfg.hasFlowPath(options, sessionSave2) and ( - not exists(DataFlow::Node rhs | rhs = getValueForFieldWrite(options.asExpr(), "HttpOnly")) + not exists(DataFlow::Node rhs | + rhs = getValueForFieldWrite(options.getNode().asExpr(), "HttpOnly") + ) and + sessionSave2.getNode() = sessionSave.getNode() and + sink = sessionSave2 and + source = options or - exists(DataFlow::Node rhs | - rhs = getValueForFieldWrite(options.asExpr(), "HttpOnly") and - rhs.getAPredecessor*().asExpr().getBoolValue() = false + exists( + BoolToGorillaSessionOptionsTrackingConfiguration boolCfg, + DataFlow::PathNode sessionSave3 + | + boolCfg.hasFlowPath(source, sessionSave3) and + sessionSave3.getNode() = sessionSave.getNode() and + sink = sessionSave3 ) ) ) @@ -61,9 +79,9 @@ predicate isGorillaSessionsCookieFlow(Expr expr) { ) } -from Expr expr +from DataFlow::PathNode source, DataFlow::PathNode sink where - isNetHttpCookieFlow(expr) or - isGinContextCookieFlow(expr) or - isGorillaSessionsCookieFlow(expr) -select expr, "Cookie attribute 'HttpOnly' is not set to true." + isNetHttpCookieFlow(source, sink) or + isGinContextCookieFlow(source, sink) or + isGorillaSessionsCookieFlow(source, sink) +select sink.getNode(), source, sink, "Cookie attribute 'HttpOnly' is not set to true." diff --git a/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected b/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected index 5c4e2c3d2e7..aad8e0beed7 100644 --- a/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected +++ b/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected @@ -1,11 +1,272 @@ -| CookieWithoutHttpOnly.go:14:20:14:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:23:20:23:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:50:20:50:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:60:20:60:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:90:20:90:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:109:20:109:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:119:20:119:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:128:2:128:8 | session | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:141:2:141:8 | session | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:152:2:152:8 | session | Cookie attribute 'HttpOnly' is not set to true. | -| CookieWithoutHttpOnly.go:189:75:189:79 | false | Cookie attribute 'HttpOnly' is not set to true. | +edges +| CookieWithoutHttpOnly.go:10:7:13:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:14:20:14:21 | &... | +| CookieWithoutHttpOnly.go:10:7:13:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:14:20:14:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:14:20:14:21 | &... : pointer type | CookieWithoutHttpOnly.go:14:20:14:21 | &... | +| CookieWithoutHttpOnly.go:14:20:14:21 | &... : pointer type | CookieWithoutHttpOnly.go:14:20:14:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:18:7:22:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:23:20:23:21 | &... | +| CookieWithoutHttpOnly.go:18:7:22:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:21:13:21:17 | false : bool | CookieWithoutHttpOnly.go:23:20:23:21 | &... | +| CookieWithoutHttpOnly.go:21:13:21:17 | false : bool | CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | CookieWithoutHttpOnly.go:23:20:23:21 | &... | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | CookieWithoutHttpOnly.go:23:20:23:21 | &... | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:27:7:31:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:32:20:32:21 | &... | +| CookieWithoutHttpOnly.go:27:7:31:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:32:20:32:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:32:20:32:21 | &... : pointer type | CookieWithoutHttpOnly.go:32:20:32:21 | &... | +| CookieWithoutHttpOnly.go:32:20:32:21 | &... : pointer type | CookieWithoutHttpOnly.go:32:20:32:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:36:7:39:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:41:20:41:21 | &... | +| CookieWithoutHttpOnly.go:36:7:39:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:41:20:41:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:41:20:41:21 | &... : pointer type | CookieWithoutHttpOnly.go:41:20:41:21 | &... | +| CookieWithoutHttpOnly.go:41:20:41:21 | &... : pointer type | CookieWithoutHttpOnly.go:41:20:41:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:45:7:48:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:50:20:50:21 | &... | +| CookieWithoutHttpOnly.go:45:7:48:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:49:15:49:19 | false : bool | CookieWithoutHttpOnly.go:50:20:50:21 | &... | +| CookieWithoutHttpOnly.go:49:15:49:19 | false : bool | CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | CookieWithoutHttpOnly.go:50:20:50:21 | &... | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | CookieWithoutHttpOnly.go:50:20:50:21 | &... | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:54:9:54:13 | false : bool | CookieWithoutHttpOnly.go:60:20:60:21 | &... | +| CookieWithoutHttpOnly.go:54:9:54:13 | false : bool | CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:55:7:59:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:60:20:60:21 | &... | +| CookieWithoutHttpOnly.go:55:7:59:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | CookieWithoutHttpOnly.go:60:20:60:21 | &... | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | CookieWithoutHttpOnly.go:60:20:60:21 | &... | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:65:7:69:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:70:20:70:21 | &... | +| CookieWithoutHttpOnly.go:65:7:69:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:70:20:70:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:70:20:70:21 | &... : pointer type | CookieWithoutHttpOnly.go:70:20:70:21 | &... | +| CookieWithoutHttpOnly.go:70:20:70:21 | &... : pointer type | CookieWithoutHttpOnly.go:70:20:70:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:75:7:78:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:80:20:80:21 | &... | +| CookieWithoutHttpOnly.go:75:7:78:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:80:20:80:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:80:20:80:21 | &... : pointer type | CookieWithoutHttpOnly.go:80:20:80:21 | &... | +| CookieWithoutHttpOnly.go:80:20:80:21 | &... : pointer type | CookieWithoutHttpOnly.go:80:20:80:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:84:9:84:13 | false : bool | CookieWithoutHttpOnly.go:90:20:90:21 | &... | +| CookieWithoutHttpOnly.go:84:9:84:13 | false : bool | CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:85:7:88:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:90:20:90:21 | &... | +| CookieWithoutHttpOnly.go:85:7:88:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | CookieWithoutHttpOnly.go:90:20:90:21 | &... | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | CookieWithoutHttpOnly.go:90:20:90:21 | &... | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:98:15:98:19 | false : bool | CookieWithoutHttpOnly.go:99:20:99:21 | &... | +| CookieWithoutHttpOnly.go:98:15:98:19 | false : bool | CookieWithoutHttpOnly.go:99:20:99:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:99:20:99:21 | &... : pointer type | CookieWithoutHttpOnly.go:99:20:99:21 | &... | +| CookieWithoutHttpOnly.go:99:20:99:21 | &... : pointer type | CookieWithoutHttpOnly.go:99:20:99:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:104:7:107:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:109:20:109:21 | &... | +| CookieWithoutHttpOnly.go:104:7:107:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:108:15:108:19 | false : bool | CookieWithoutHttpOnly.go:109:20:109:21 | &... | +| CookieWithoutHttpOnly.go:108:15:108:19 | false : bool | CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | CookieWithoutHttpOnly.go:109:20:109:21 | &... | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | CookieWithoutHttpOnly.go:109:20:109:21 | &... | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:114:7:117:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:119:20:119:21 | &... | +| CookieWithoutHttpOnly.go:114:7:117:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:118:15:118:19 | false : bool | CookieWithoutHttpOnly.go:119:20:119:21 | &... | +| CookieWithoutHttpOnly.go:118:15:118:19 | false : bool | CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | CookieWithoutHttpOnly.go:119:20:119:21 | &... | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | CookieWithoutHttpOnly.go:119:20:119:21 | &... | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:125:16:125:20 | store : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:133:16:133:20 | store : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:145:16:145:20 | store : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:157:16:157:20 | store : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:169:16:169:20 | store : pointer type | +| CookieWithoutHttpOnly.go:125:16:125:20 | store : pointer type | CookieWithoutHttpOnly.go:128:2:128:8 | session | +| CookieWithoutHttpOnly.go:132:14:132:18 | false : bool | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:132:14:132:18 | false : bool | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:132:14:132:18 | false : bool | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:16:133:20 | store : pointer type | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:21:139:2 | struct literal : Options | CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:21:139:2 | struct literal : Options | CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:21:139:2 | struct literal : Options | CookieWithoutHttpOnly.go:141:2:141:8 | session | +| CookieWithoutHttpOnly.go:145:2:145:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:146:2:146:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:145:2:145:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:148:2:148:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:145:16:145:20 | store : pointer type | CookieWithoutHttpOnly.go:152:2:152:8 | session | +| CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:145:2:145:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:152:2:152:8 | session | +| CookieWithoutHttpOnly.go:146:2:146:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:145:2:145:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:152:2:152:8 | session | +| CookieWithoutHttpOnly.go:148:2:148:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:21:150:2 | struct literal : Options | CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:21:150:2 | struct literal : Options | CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:21:150:2 | struct literal : Options | CookieWithoutHttpOnly.go:152:2:152:8 | session | +| CookieWithoutHttpOnly.go:157:2:157:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:158:2:158:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:157:2:157:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:160:2:160:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:157:16:157:20 | store : pointer type | CookieWithoutHttpOnly.go:165:2:165:8 | session | +| CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:157:2:157:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:165:2:165:8 | session | +| CookieWithoutHttpOnly.go:158:2:158:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:157:2:157:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:165:2:165:8 | session | +| CookieWithoutHttpOnly.go:160:2:160:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:21:163:2 | struct literal : Options | CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:21:163:2 | struct literal : Options | CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:21:163:2 | struct literal : Options | CookieWithoutHttpOnly.go:165:2:165:8 | session | +| CookieWithoutHttpOnly.go:169:2:169:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:170:2:170:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:169:2:169:8 | definition of session [pointer] : Session | CookieWithoutHttpOnly.go:172:2:172:8 | session [pointer] : Session | +| CookieWithoutHttpOnly.go:169:16:169:20 | store : pointer type | CookieWithoutHttpOnly.go:177:2:177:8 | session | +| CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:169:2:169:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:177:2:177:8 | session | +| CookieWithoutHttpOnly.go:170:2:170:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:169:2:169:8 | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | CookieWithoutHttpOnly.go:177:2:177:8 | session | +| CookieWithoutHttpOnly.go:172:2:172:8 | session [pointer] : Session | CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:21:175:2 | struct literal : Options | CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:21:175:2 | struct literal : Options | CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:21:175:2 | struct literal : Options | CookieWithoutHttpOnly.go:177:2:177:8 | session | +nodes +| CookieWithoutHttpOnly.go:10:7:13:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:14:20:14:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:14:20:14:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:18:7:22:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:21:13:21:17 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:27:7:31:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:32:20:32:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:32:20:32:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:36:7:39:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:41:20:41:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:41:20:41:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:45:7:48:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:49:15:49:19 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:54:9:54:13 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:55:7:59:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:65:7:69:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:70:20:70:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:70:20:70:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:75:7:78:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:80:20:80:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:80:20:80:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:84:9:84:13 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:85:7:88:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:98:15:98:19 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:99:20:99:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:99:20:99:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:104:7:107:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:108:15:108:19 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:114:7:117:2 | struct literal : Cookie | semmle.label | struct literal : Cookie | +| CookieWithoutHttpOnly.go:118:15:118:19 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... | semmle.label | &... | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... : pointer type | semmle.label | &... : pointer type | +| CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | semmle.label | call to NewCookieStore : pointer type | +| CookieWithoutHttpOnly.go:125:16:125:20 | store : pointer type | semmle.label | store : pointer type | +| CookieWithoutHttpOnly.go:128:2:128:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:132:14:132:18 | false : bool | semmle.label | false : bool | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | semmle.label | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:2:133:8 | definition of session [pointer] : Session | semmle.label | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:133:16:133:20 | store : pointer type | semmle.label | store : pointer type | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:134:2:134:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:136:2:136:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:136:21:139:2 | struct literal : Options | semmle.label | struct literal : Options | +| CookieWithoutHttpOnly.go:141:2:141:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:141:2:141:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:141:2:141:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:145:2:145:8 | definition of session [pointer] : Session | semmle.label | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:145:16:145:20 | store : pointer type | semmle.label | store : pointer type | +| CookieWithoutHttpOnly.go:146:2:146:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:146:2:146:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:148:2:148:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:148:21:150:2 | struct literal : Options | semmle.label | struct literal : Options | +| CookieWithoutHttpOnly.go:152:2:152:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:152:2:152:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:157:2:157:8 | definition of session [pointer] : Session | semmle.label | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:157:16:157:20 | store : pointer type | semmle.label | store : pointer type | +| CookieWithoutHttpOnly.go:158:2:158:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:158:2:158:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:160:2:160:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:160:21:163:2 | struct literal : Options | semmle.label | struct literal : Options | +| CookieWithoutHttpOnly.go:165:2:165:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:165:2:165:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:169:2:169:8 | definition of session [pointer] : Session | semmle.label | definition of session [pointer] : Session | +| CookieWithoutHttpOnly.go:169:16:169:20 | store : pointer type | semmle.label | store : pointer type | +| CookieWithoutHttpOnly.go:170:2:170:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:170:2:170:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | implicit dereference : Session | semmle.label | implicit dereference : Session | +| CookieWithoutHttpOnly.go:172:2:172:8 | session [pointer] : Session | semmle.label | session [pointer] : Session | +| CookieWithoutHttpOnly.go:172:21:175:2 | struct literal : Options | semmle.label | struct literal : Options | +| CookieWithoutHttpOnly.go:177:2:177:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:177:2:177:8 | session | semmle.label | session | +| CookieWithoutHttpOnly.go:189:75:189:79 | false | semmle.label | false | +#select +| CookieWithoutHttpOnly.go:14:20:14:21 | &... | CookieWithoutHttpOnly.go:10:7:13:2 | struct literal : Cookie | CookieWithoutHttpOnly.go:14:20:14:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:23:20:23:21 | &... | CookieWithoutHttpOnly.go:21:13:21:17 | false : bool | CookieWithoutHttpOnly.go:23:20:23:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:50:20:50:21 | &... | CookieWithoutHttpOnly.go:49:15:49:19 | false : bool | CookieWithoutHttpOnly.go:50:20:50:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:60:20:60:21 | &... | CookieWithoutHttpOnly.go:54:9:54:13 | false : bool | CookieWithoutHttpOnly.go:60:20:60:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:90:20:90:21 | &... | CookieWithoutHttpOnly.go:84:9:84:13 | false : bool | CookieWithoutHttpOnly.go:90:20:90:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:109:20:109:21 | &... | CookieWithoutHttpOnly.go:108:15:108:19 | false : bool | CookieWithoutHttpOnly.go:109:20:109:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:119:20:119:21 | &... | CookieWithoutHttpOnly.go:118:15:118:19 | false : bool | CookieWithoutHttpOnly.go:119:20:119:21 | &... | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:128:2:128:8 | session | CookieWithoutHttpOnly.go:122:13:122:49 | call to NewCookieStore : pointer type | CookieWithoutHttpOnly.go:128:2:128:8 | session | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:141:2:141:8 | session | CookieWithoutHttpOnly.go:132:14:132:18 | false : bool | CookieWithoutHttpOnly.go:141:2:141:8 | session | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:152:2:152:8 | session | CookieWithoutHttpOnly.go:148:21:150:2 | struct literal : Options | CookieWithoutHttpOnly.go:152:2:152:8 | session | Cookie attribute 'HttpOnly' is not set to true. | +| CookieWithoutHttpOnly.go:189:75:189:79 | false | CookieWithoutHttpOnly.go:189:75:189:79 | false | CookieWithoutHttpOnly.go:189:75:189:79 | false | Cookie attribute 'HttpOnly' is not set to true. |