需要帮助以了解和实施基本的 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.xmltomcat-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】:

如下更改&lt;url-pattern&gt;并尝试

<url-pattern>/*</url-pattern>

【讨论】:

顺便说一句,我是否必须将登录代码放入 tomcat web.xml 或我的网络应用程序的 web.xml 中? 上面的方法有用吗?你的意思是?其他一切看起来都很好。只需尝试更改 谢谢。这样可行。我刚刚意识到我在 web 应用程序的 web.xml 文件中犯了一个错误 - S 应该是 SecretServlet 中的大写。呵呵!

以上是关于需要帮助以了解和实施基本的 Web 应用程序安全性的主要内容,如果未能解决你的问题,请参考以下文章

Flutter web:实施 Firebase 应用检查后出现 403 权限被拒绝错误

安全地包装连接池

防火墙基础之华为华三防火墙web页面登录

云原生应用安全落地,你需要了解的容器安全体系

设置mySql server和Xampp现在需要了解基本的安全性

设置mySql server和Xampp现在需要了解基本的安全性