需要帮助以了解和实施基本的 Web 应用程序安全性
Posted
技术标签:
【中文标题】需要帮助以了解和实施基本的 Web 应用程序安全性【英文标题】:Need help to understand and implement basic web app security 【发布时间】:2014-07-14 02:49:41 【问题描述】:我正在从“head first jsp 和 servlet”学习基本的 Web 应用程序安全性。除了web.xml
和tomcat-users.xml
设置之外,安全应用程序没有代码。我按照这本书并尝试编写自己的代码,但我无法控制对我的网络应用程序的访问。
尽管在 tomcat-users.xml 中设置了角色并编辑了web.xml
,任何人都可以访问它。请帮助我理解这一点并完成我的示例。我正在使用 Eclipse 开普勒和 Tomcat 6.0。
Eclipse 项目:
预期:运行start.html
并点击submit button
访问SecureServlet
。容器应该要求您登录以访问该 servlet。如果登录名与web.xml
设置中的登录名匹配,则会显示secret.jsp
页面。
输出:没有安全措施。无需登录即可看到secret.jsp
。
Tomcat-users.xml:
<tomcat-users>
<role rolename="Admin"/>
<role rolename="Member"/>
<role rolename="Guest"/>
<user username="jim" password="admin" roles="Admin, Member, Guest" />
<user username="tim" password="premium" roles="Member, Guest" />
<user username="fred" password="regular" roles="Guest" />
</tomcat-users>
web.xml: 将代码放在 tomcat 的 web.xml 和我的网络应用程序的 web.xml 中以确保安全。
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>WebSecurity</web-resource-name>
<url-pattern>/secretServlet</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
<role-name>Member</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>Admin</role-name>
</security-role>
<security-role>
<role-name>Member</role-name>
</security-role>
<security-role>
<role-name>Guest</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<!--If web app web. xml, then add the mapping below-->
<servlet>
<description></description>
<display-name>SecretServlet</display-name>
<servlet-name>SecretServlet</servlet-name>
<servlet-class>foo.SecretServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SecretServlet</servlet-name>
<url-pattern>/SecretServlet</url-pattern>
</servlet-mapping>
</web-app>
Html 起始页:
Enter here:<br>
<form method=post action="/WebSecurity/SecretServlet" >
<input type="submit" name="submit" value="try to access!">
</form>
Servlet:
package foo;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecretServlet extends HttpServlet
private static final long serialVersionUID = 1L;
public SecretServlet()
super();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
RequestDispatcher view = request.getRequestDispatcher("/jsp/secret.jsp");
view.forward(request, response);
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
RequestDispatcher view = request.getRequestDispatcher("/jsp/secret.jsp");
view.forward(request, response);
secret.jsp:
<h3>Congratulations ! You entered the secure area.</h3>
【问题讨论】:
请分享您的 web.xml 配置 @Javakid - 我编辑了这个问题。 web.xml 现在可见。 请注意,手写 servlet 是个坏主意,与 Thymeleaf 等更现代的技术相比,即使是 JSP 也非常笨拙。一定要了解系统的管道,但对于实际工作,我强烈建议使用 Spring MVC 之类的框架(Spring Boot 甚至可以为您完成大部分安全设置)。 @chrylis - 谢谢。一步一步来。我需要掌握 jsp、servlet,然后才能做 spring 和所有其他好东西。见 - coderanch.com/t/633527/Spring/… 请注意,您实际上不需要了解 servlet 即可使用 Spring MVC 之类的东西;所有的 servlet 管道都是为您处理的。你可以只写一个使用 POJO 的 Java 方法,Spring 会为你调整一切。 【参考方案1】:如下更改<url-pattern>
并尝试
<url-pattern>/*</url-pattern>
【讨论】:
顺便说一句,我是否必须将登录代码放入 tomcat web.xml 或我的网络应用程序的 web.xml 中? 上面的方法有用吗?你的意思是?其他一切看起来都很好。只需尝试更改以上是关于需要帮助以了解和实施基本的 Web 应用程序安全性的主要内容,如果未能解决你的问题,请参考以下文章
Flutter web:实施 Firebase 应用检查后出现 403 权限被拒绝错误