Ensure cookies have the secure flag
このページは日本語には対応しておりません。随時翻訳に取り組んでいます。
翻訳に関してご質問やご意見ございましたら、
お気軽にご連絡ください。
ID: java-security/cookies-secure-flag
Language: Java
Severity: Warning
Category: Security
CWE: 614
Description
Ensure cookies use the secure
flag or attribute. If not set, it could cause the user agent to send those cookies in plaintext over an HTTP session.
Learn More
Non-Compliant Code Examples
class Compliant {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String queryString = request.getQueryString();
String paramval = "BenchmarkTest01683" + "=";
int paramLoc = -1;
if (queryString != null) paramLoc = queryString.indexOf(paramval);
if (paramLoc == -1) {
response.getWriter()
.println(
"getQueryString() couldn't find expected parameter '"
+ "BenchmarkTest01683"
+ "' in query string.");
return;
}
String param =
queryString.substring(
paramLoc
+ paramval
.length()); // 1st assume "BenchmarkTest01683" param is last
// parameter in query string.
// And then check to see if its in the middle of the query string and if so, trim off what
// comes after.
int ampersandLoc = queryString.indexOf("&", paramLoc);
if (ampersandLoc != -1) {
param = queryString.substring(paramLoc + paramval.length(), ampersandLoc);
}
param = java.net.URLDecoder.decode(param, "UTF-8");
String bar = new Test().doSomething(request, param);
byte[] input = new byte[1000];
String str = "?";
Object inputParam = param;
if (inputParam instanceof String) str = ((String) inputParam);
if (inputParam instanceof java.io.InputStream) {
int i = ((java.io.InputStream) inputParam).read(input);
if (i == -1) {
response.getWriter()
.println(
"This input source requires a POST, not a GET. Incompatible UI for the InputStream source.");
return;
}
str = new String(input, 0, i);
}
if ("".equals(str)) str = "No cookie value supplied";
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("SomeCookie", str);
cookie.setSecure(false);
cookie.setHttpOnly(true);
cookie.setPath(request.getRequestURI()); // i.e., set path to JUST this servlet
// e.g., /benchmark/sql-01/BenchmarkTest01001
response.addCookie(cookie);
response.getWriter()
.println(
"Created cookie: 'SomeCookie': with value: '"
+ org.owasp.esapi.ESAPI.encoder().encodeForHTML(str)
+ "' and secure flag set to: false");
}
}
class NotCompliant {
public void setCookie(String field, String value) {
Cookie cookie = new Cookie(field, value);
response.addCookie(cookie);
}
}
Compliant Code Examples
class Compliant {
public void setCookie(String field, String value) {
Cookie cookie = new Cookie(field, value);
cookie.setSecure(true);
cookie.setHttpOnly(true);
response.addCookie(cookie);
}
}