Vil*_*kas 9 java security cookies servlets
Servlet API提供了一种设置cookie的便捷方法:
response.addCookie(new Cookie(name, value))
Run Code Online (Sandbox Code Playgroud)
JavaDoc告诉:
对于版本0 cookie,值不应包含空格,括号,括号,等号,逗号,双引号,斜杠,问号,符号,冒号和分号.在所有浏览器上,空值的行为可能不同.
但是,它不会告诉如果值中存在这些字符会发生什么.
如果值来自不受信任的来源,我可以使用API安全地设置值而无需额外的预处理,还是我打开门进行某种注入?
如果值来自不受信任的来源,我是否可以使用API安全地设置值而无需额外的预处理?
不行,你不可以.API不会为您解决此问题.否则将在Javadoc中明确指定.如果您使用的是版本0(Netscape)或版本1(RFC2965)cookie ,API可能不会事先知道.
最好的方法是事先对cookie名称/值进行URL编码,以确保最终得到一个安全的cookie名称/值.
String safeCookieName = URLEncoder.encode(name, "UTF-8");
String safeCookieValue = URLEncoder.encode(value, "UTF-8");
response.addCookie(new Cookie(safeCookieName, safeCookieValue));
// ...
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用正则表达式预先删除所有非法字符.只允许使用字母字符,数字,连字符,下划线,句点,波浪线以及可能更多(依赖浏览器!).所有其他人都需要被剥夺.