mirror of
https://github.com/jenkinsci/jenkins.git
synced 2026-11-14 04:22:16 +00:00
[FIXED JENKINS-25019]
A truly conforming servlet 3.0 container does not allow us to set "secure cookie" flag beyond ServletContextListener.onInitialized(). If we see that, don't scare the users.
This commit is contained in:
1 parent
d2a0a6c2ae
commit
582128b9ac
3 files changed
+42
-6
No files matched your search
@@ -56,6 +56,7 @@ import javax.xml.transform.TransformerFactoryConfigurationError;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.Date;
|
||||
@@ -116,6 +117,8 @@ public class WebAppMain implements ServletContextListener {
|
||||
|
||||
installLogger();
|
||||
|
||||
markCookieAsHttpOnly(context);
|
||||
|
||||
final FileAndDescription describedHomeDir = getHomeDir(event);
|
||||
home = describedHomeDir.file.getAbsoluteFile();
|
||||
home.mkdirs();
|
||||
@@ -251,6 +254,31 @@ public class WebAppMain implements ServletContextListener {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the session cookie as HTTP only.
|
||||
*
|
||||
* @see <a href="https://www.owasp.org/index.php/HttpOnly">discussion of this topic in OWASP</a>
|
||||
*/
|
||||
private void markCookieAsHttpOnly(ServletContext context) {
|
||||
try {
|
||||
Method m;
|
||||
try {
|
||||
m = context.getClass().getMethod("getSessionCookieConfig");
|
||||
} catch (NoSuchMethodException x) { // 3.0+
|
||||
LOGGER.log(Level.FINE, "Failed to set secure cookie flag", x);
|
||||
return;
|
||||
}
|
||||
Object sessionCookieConfig = m.invoke(context);
|
||||
|
||||
// not exposing session cookie to JavaScript to mitigate damage caused by XSS
|
||||
Class scc = Class.forName("javax.servlet.SessionCookieConfig");
|
||||
Method setHttpOnly = scc.getMethod("setHttpOnly",boolean.class);
|
||||
setHttpOnly.invoke(sessionCookieConfig,true);
|
||||
} catch (Exception e) {
|
||||
LOGGER.log(Level.WARNING, "Failed to set HTTP-only cookie flag", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void joinInit() throws InterruptedException {
|
||||
initThread.join();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user