JAVA开发常见安全问题:URL 重定向
专栏链接
一、数据的校验
- SQL注入
- 命令注入
- 跨站脚本
- 任意文件上传
- 任意文件下载
- 任意文件删除
- 任意文件读取与写入
- Iframe 框架钓鱼
- 负值支付漏洞
二、认证与授权
- 密码修改(无需原密码)
- 密码策略不足
- 用户名密码(敏感信息)明文传输
- 验证码可重复利用
- 缺少验证码功能
- 用户名枚举(用户名和密码单独验证)
- 登录尝试次数限制功能失效
- 登录后门
- 横向越权
- 纵向越权
三、Cookie与会话管理
- 直接关闭浏览器“退出“系统
- 会话标识未更新
- Cookie 中明文存储用户名、密码
四、错误处理
- 数据库交互中的异常处理
五、日志安全
- 日志记录敏感信息
六、未验证的重定向
- URL 重定向
未验证的重定向:URL 重定向
漏洞描述:
在 Web 应用中重定向是极为普遍的,并且通常重定向所引向的目的是带有用户输入参数的目的 URL,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们所要用户访问的站点。
不合规的代码示例:
<%
String z = request.getParameter("z");
if(null != z && z.indexOf("http") != -1) {
CasJSON cj = (CasJSON) session.getAttribute("CAS");
int orgId = 0;
try {
orgId = cj.getMsg().getOrgId().intValue();
if(-1 == z.indexOf('?')) {
z += "?groupid=" + orgId;
} else {
z += "&groupid=" + orgId;
}
response.sendRedirect(z);
} catch (Exception e) {}
}
%>
不合规说明:
对用户传入的 URL 未做任何的校验。
合规的代码示例:
<%
String[] strUrl ={"域名地址 1","域名地址 2","域名地址3"};
String z = request.getParameter("z");
if(null != z && z.indexOf("http") != -1) {
boolean isYes = false;
for(String url:strUrl){
if(z.startsWith(url)){
isYes = true;
break;
}
}
if(!isYes){
response.sendRedirect(request.getContextPath()+"/404.js p");
}else{
CasJSON cj = (CasJSON) session.getAttribute("CAS");
int orgId = 0;
try {
orgId = cj.getMsg().getOrgId().intValue();
if(-1 == z.indexOf('?')) {
z += "?groupid=" + orgId;
} else {
z += "&groupid=" + orgId;
}
response.sendRedirect(z);
} catch (Exception e) {}
}
}
%>
## 合规说明:
使用白名单的方式对用户传入的 z 参数进行限制。










