温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何避免java JSP页面漏洞

发布时间:2026-09-12 00:28:45 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java Web 开发中,JSP 页面漏洞通常来自“把业务逻辑写在页面里”“直接拼接用户输入”“权限控制缺失”等问题。下面从常见漏洞类型 → 防护手段 → 最佳实践三个层面说明,偏实战。


一、JSP 常见漏洞类型

  1. XSS(跨站脚本)

    • 页面直接输出用户输入
    • 示例:<%= request.getParameter("name") %>
  2. SQL 注入

    • JSP 中拼接 SQL
    • 示例:"select * from user where name='" + name + "'"
  3. 命令 / 代码执行

    • 使用 Runtime.exec()、Expression Language 注入
  4. 越权访问

    • 没有登录校验、没有角色控制
  5. 敏感信息泄露

    • 异常堆栈、数据库错误直接显示
  6. 文件包含 / 路径遍历

    • <jsp:include> 或文件读取基于用户输入

二、核心防护手段(必须做)

1. 禁止在 JSP 中写 Java 代码

❌ 错误示例:

<%
String sql = "select * from user where id=" + request.getParameter("id");
%>

✅ 正确做法:

  • 业务逻辑放 Servlet / Service
  • JSP 只负责展示(View)

2. 输出时使用“转义”

(1)JSP 原生方式

<%= org.apache.commons.lang.StringEscapeUtils.escapeHtml(request.getParameter("name")) %>

(2)使用 JSTL(推荐)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:out value="${name}" />

c:out 默认自动 HTML 转义


3. 使用 PreparedStatement(防 SQL 注入)

String sql = "select * from user where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);

4. 统一登录 & 权限校验

在 Filter 中统一处理:

if (session.getAttribute("user") == null) {
    response.sendRedirect("login.jsp");
    return;
}

或使用 Spring Security / Shiro。


5. 禁用危险功能

在 web.xml:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <scripting-invalid>true</scripting-invalid>
  </jsp-property-group>
</jsp-config>

禁止 <% %> 脚本


6. 避免 EL 表达式注入

❌ 危险:

${requestScope[param.x]}

✅ 只使用明确变量:

${user.name}

7. 错误页面统一处理

<error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/error.jsp</location>
</error-page>

不要显示堆栈信息


三、JSP 安全开发最佳实践

✅ MVC 分层

  • JSP = View
  • Servlet / Controller = 控制
  • Service / DAO = 业务 & 数据

✅ 前后端分离趋势

  • 新项目建议:
    • 后端:Spring Boot + REST
    • 前端:Vue / React
  • JSP 仅用于老系统维护

✅ 安全依赖

  • OWASP Java Encoder
  • OWASP ESAPI
  • Spring Security

四、快速自查清单 ✅

  • [ ] JSP 中无 <% java 代码 %>
  • [ ] 所有用户输入都转义
  • [ ] SQL 全部使用 PreparedStatement
  • [ ] 有统一登录校验
  • [ ] 无错误信息暴露
  • [ ] 使用 JSTL / EL 而非脚本

如果你愿意,我可以:

  • 帮你审查一段 JSP 代码是否安全
  • 给你一个安全的 JSP 模板
  • 对比 JSP vs Thymeleaf 安全性

你可以直接贴代码或说使用场景。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手