如何保护 Web 应用程序? [关闭]

Posted

技术标签:

【中文标题】如何保护 Web 应用程序? [关闭]【英文标题】:How can i secure a web application? [closed] 【发布时间】:2013-07-26 12:33:34 【问题描述】:

我有一个 Web 应用程序 (JSP),我需要限制访问,因此只有登录的用户才能看到该应用程序。我看了看,发现了许多不同的方法。有人说要使用 cookie、会话或框架,例如 Spring Security。 我应该使用什么?到目前为止,我在 java 和 jsp 编程方面有中等经验,那么您建议我做什么?非常感谢!

【问题讨论】:

【参考方案1】:

我建议直接使用它,而不是准备自制版本的 Spring Security。考虑以下优点:

将来如果您需要一些新的安全功能,那么您可以打开它们,而不是从零开始开发它们(例如 LDAP 身份验证、SSO 等) 新开发人员有可能已经熟悉您的安全框架(另一方面,它肯定不会熟悉您的自制实验室) 他们中的大多数都有很好的文档,所以当我们谈论基本的 URL 授权时,学习的机会很小(您有足够的时间为您的自制库准备相同级别的文档吗?)。 它们具有针对会话固定等攻击的内置支持。 它们有多个扩展点,因此您将不受框架的限制(您将能够添加/修改必要的功能)。 它们具有模块化结构,您不需要加载所有模块/了解它们。只使用你需要的东西。

检查Apache Shiro 和Spring Security 可能对您有用。

对于 Spring Security,如果您从 here 开始阅读官方文档,那么您可以在不到 30 分钟的时间内为基本 URL 授权(在 conf 中使用硬编码用户)准备所有 conf。然后,您需要在类路径中包含相应的 jar(用于 Spring 和 Spring Security),仅此而已。打开org.springframework.security 的调试日志以查看发生了什么。

【讨论】:

【参考方案2】:

考虑使用 servlet 过滤器。将登录用户存储在会话中,并配置过滤器以检查用户在尝试访问您网站的安全目录时是否已登录(通过 url-pattern)。

这里是http://www.tutorialspoint.com/jsp/jsp_writing_filters.htm的基本信息。

但这里有一些更具体的内容可以帮助您入门。

创建一个实现 javax.servlet.Filter 的类,覆盖 doFilter 方法并检查用户是否已登录并使用注释配置 urlPatterns。

过滤器上的注释是这样的:

@WebFilter(filterName="LoggingFilter", urlPatterns="/secured/*")

您希望保护的目录称为“安全”。

在类中重写doFilter()方法并检查用户是否登录:

User user = session.getAttribute("user");
if (user != null) 
    chain.doFilter(request, response); // User is logged in so forward response.
 else 
    response.sendRedirect("login"); // User not logged in so redirect to login page.

这是将登录用户限制在网站指定部分的有效方法。这个简单的示例可以扩展为根据用户类型或其他标准限制对网站不同部分的访问。

【讨论】:

谢谢,非常有用的信息。所以,你建议不要使用像 Spring Security 这样的框架来做到这一点@Alex Theedom Spring Security 在引擎盖下是一样的。它通过 servlet 过滤器拦截 HTTP 请求。与上面相同,但 Spring Security 具有更多配置,因此更复杂。您做出的选择取决于一系列相互关联的因素。上面的选项简单且易于实现,而 Spring Security 更复杂,可能超出您的项目所需。虽然如果您已经在使用 Spring,那么使用 Spring Security 是有意义的。

以上是关于如何保护 Web 应用程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以保护在开源项目中进行的 Web 服务调用? [关闭]

如何保护我的程序免受“非法”复制? [关闭]

Android如何在用户硬重置设备时保护应用程序不被删除[关闭]

什么是 OAuth,它如何保护 REST API 调用? [关闭]

如何保护 Angular 6 - Spring Boot 微服务应用程序 [关闭]

如何通过代码(在cmd中)打开屏幕保护程序(Windows 7)? [关闭]