在 Java Web 开发中,JSP 页面漏洞通常来自“把业务逻辑写在页面里”“直接拼接用户输入”“权限控制缺失”等问题。下面从常见漏洞类型 → 防护手段 → 最佳实践三个层面说明,偏实战。
XSS(跨站脚本)
<%= request.getParameter("name") %>SQL 注入
"select * from user where name='" + name + "'"命令 / 代码执行
Runtime.exec()、Expression Language 注入越权访问
敏感信息泄露
文件包含 / 路径遍历
<jsp:include> 或文件读取基于用户输入❌ 错误示例:
<%
String sql = "select * from user where id=" + request.getParameter("id");
%>
✅ 正确做法:
<%= org.apache.commons.lang.StringEscapeUtils.escapeHtml(request.getParameter("name")) %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="${name}" />
c:out默认自动 HTML 转义
String sql = "select * from user where id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);
在 Filter 中统一处理:
if (session.getAttribute("user") == null) {
response.sendRedirect("login.jsp");
return;
}
或使用 Spring Security / Shiro。
在 web.xml:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
禁止
<% %>脚本
❌ 危险:
${requestScope[param.x]}
✅ 只使用明确变量:
${user.name}
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
不要显示堆栈信息
✅ MVC 分层
✅ 前后端分离趋势
✅ 安全依赖
<% java 代码 %>如果你愿意,我可以:
你可以直接贴代码或说使用场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。