`

Java中Servlet获得异步支持 HttpOnly避免xss

 
阅读更多

除了引入大量的新技术和新方法外,Servlet 3.0规范还对其他地方进行了大量的增强:HttpServletRequest终于获得对multipart/form-data MIME类型的内置支持了、Cookie类开始支持“HttpOnly” cookie以避免某些跨站点的脚本攻击、ServletContext API也得到了更新,我们可以通过编程的方式将Servlet和Filter加到上下文中了

 

Web片段可以将框架的“样板”XML与应用的其他配置分开,并且能够实现应用的自我注册。Web片段必须放在名为web-fragment.xml的文件中,该文件只要位于Web应用的classpath下即可,但通常都将其放到META-INF目录下或是框架的jar文件中。XML以元素开始,里面包含的元素与web.xml部署描述符大同小异。如下代码所示:

<web-fragment>
    <filter>
        <filter-name>MyXSSFilter</filter-name>
        <filter-class> MyXssFilter</filter-class>
    </filter>
    <servlet>
        <servlet-name>myFrameworkServlet</servlet-name>
        <servlet-class> MyFrameworkServlet</servlet-class>
    </servlet>
    <listener>
        <listener-class> MyFrameworkListener</listener-class>
    </listener>
</web-fragment>

   容器在部署时会处理XML片段并组装成最终的部署描述符。由于容器负责组装web.xml文件,因此如果需要按照特定的顺序来调用框架的Servlet、Listener或Filter时就可能产生问题。为了避免这个问题,Servlet 3.0 API支持绝对与相对顺序的部署描述符。我们可以在web.xml文件中使用元素指定绝对顺序,这样WEB-INF/lib下的每个jar都可以通过META-INF/web-fragment.xml文件的元素获得一个名字。接下来,Web应用的WEB-INF/web.xml文件可以通过元素按照顺序列举出这些片段名,这个顺序就是jar的调用顺序,同时还有一个可选的元素用于指定是否以及何时包含那些未命名的jar文件。由于部署者可以选择只列出那些受信任的jar以进行部署,这样就可以避免意外情况的发生。除此之外,通过顺序还可以排除那些不需要被扫描的jar,这样就可以加快应用的部署速度。最后,如果你不想在产品环境下看到自我注册的情况发生,那就可以在web.xml文件中使用 元素,这会告诉Web容器只去寻找注解而非Web片段。

  很多Java Web应用都是基于某个框架的,如Apache Wicket、Java ServerFaces、Struts或是Spring MVC等等。要想使用框架,开发者需要在应用的web.xml配置文件中注册框架的切入代码,如Servlet、Filter或是Listener。这么做的后果就是部署描述符变得很庞大,同时导致框架所用的XML与特定于应用的XML混杂在了一起。Servlet 3.0规范的一个主要目标就是让开发者无需编辑web.xml部署描述符就能部署Servlet、Filter和Listener,同时可以将web.xml文件拆分成多个模块。为了实现这一点,Servlet 3.0规范增加了基于注解的配置(@WebServlet、@ServletFilter以及@WebServletContextListener),这使得我们可以不再需要web.xml文件,同时规范还引入了一个新的概念:Web片段(Web Fragment)。

  由于既支持片段,又可以使用注解作为另一种配置机制,Servlet 3.0可以插入框架的共享拷贝,比如JAX-WS、JAX-RS以及JSF等,他们都构建在Web容器之上,使用了ServletContainerInitializers。这些框架是通过jar services API被检测到的,同时还可以指定其处理的类型列表。对于WEB-INF/lib下的任何jar来说,只要其中包含的类被检测到都会传递给ServletContainerInitializer。这样,我们还可以将同样的API作为ServletContextListeners。

  从Servlet API首次发布以来,构建Web应用的方法发生了翻天覆地的变化,尤其是使用越来越多的异步Web技术。这些技术(一般统称为Ajax或是Web 2.0)对于Web客户端(比如浏览器)与服务器端之间的传输机制产生了重要的影响,因为客户端会在一个页面中向服务器端发出更多的请求而不是每次请求都刷新一次页面。

  长时间的服务器端处理会恶化这一情况,比如等待JDBC连接池中的连接,或是等待JMS队列中的消息等。在Servlet中等待实在是太低效了,因为这种阻塞会消耗线程以及其他有限的系统资源。鉴于此,Servlet 3.0引入了异步处理请求的功能,这样线程就可以返回到容器中并执行其他任务。在请求上的异步处理开始时,其他线程或是回调既可以生成响应,也可以分发请求以便通过AsyncContext.dispatch方法在容器上下文中执行请求。

  由于异步Servlet的行为与同步的差别非常大,因此Servlet 3.0要求开发者指定asyncSupported=true以表示Servlet支持异步请求。不仅是Servlet,Filter也可以异步执行。Servlet 3.0通过新的ServletRequest方法来支持异步处理,比如startAsync()会返回一个AsyncContext对象,该对象用于持有传递给方法的request与response对象。这里,处理原始请求的线程还可以执行其他操作。此外,API还引入了一个新的Listener类:AsyncListener,它会告诉我们异步操作何时结束或者是否超时了。AsyncContext类拥有一个complete()方法,凭借该方法我们可以在异步操作结束后提交响应。AsyncListener类拥有一个dispatch()方法,它会将异步请求转发给容器,这样其他框架(比如JSP)就可以生成响应了。

  除了引入大量的新技术和新方法外,Servlet 3.0规范还对其他地方进行了大量的增强:HttpServletRequest终于获得对multipart/form-data MIME类型的内置支持了、Cookie类开始支持“HttpOnly” cookie以避免某些跨站点的脚本攻击、ServletContext API也得到了更新,我们可以通过编程的方式将Servlet和Filter加到上下文中了。

分享到:
评论

相关推荐

    xss防御之php利用httponly防xss攻击

    例如,反射型XSS和DOM型XSS攻击往往不依赖于Cookie,因此除了使用HttpOnly之外,还需要通过其他安全措施来全面防御XSS攻击,比如内容安全策略(CSP)、输入验证、输出编码等。此外,由于Web浏览器和服务器实现的差异...

    XSS防攻击实现

    本文将深入探讨XSS攻击的原理,以及如何通过Java Spring框架中的InitBinder和自定义StringEscapeEditor类来实现有效的防御措施。 XSS攻击主要分为三种类型:反射型、存储型和DOM型。反射型XSS发生在用户点击含有...

    java防止xss注入

    **Java防止XSS注入详解** XSS(Cross-site scripting)是一种常见的网络安全漏洞,攻击者通过在网页中嵌入恶意脚本,使用户在不知情的情况下执行这些脚本,从而窃取用户信息或进行其他恶意操作。Java作为广泛应用于...

    cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击.zip_js设置cookie值

    在Java Web开发中,通常使用Servlet API来设置Cookie。以下是一个示例,展示了如何在响应头中添加带有HttpOnly属性的Cookie: ```java response.setHeader("Set-Cookie", "username=JohnDoe; Path=/; HttpOnly"); `...

    XSS跨站脚本攻击在Java开发中防范的方法

    ### XSS跨站脚本攻击在Java开发中的防范方法 #### XSS攻击原理与分类 XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的安全威胁,它利用Web应用程序的安全漏洞,将恶意脚本注入到合法的网页中,进而攻击最终...

    spring boot xss防御

    在Spring Boot应用中,XSS(Cross Site Scripting,跨站脚本攻击)是一种常见的安全威胁,它允许攻击者向Web页面注入恶意脚本,从而影响用户的安全。本项目"spring boot xss防御"旨在介绍如何在Spring Boot环境中...

    Session Cookie的HttpOnly和secure属性

    如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。 对于以上两个属性, 首先,secure属性是防止信息在传递的过程中被监听捕获后信息泄漏,...

    cookie设置httpOnly和secure属性实现及问题

    在Java Web应用中,可以通过编写自定义过滤器来实现`httpOnly`和`secure`属性的设置。下面是一个简单的示例: ```java public class CookieSecureFilter implements Filter { @Override public void doFilter...

    session配置secure和httpOnly

    1. 在GlassFish 2.x环境下,由于只支持Servlet 2.5,不直接支持`HttpOnly`属性。可以通过添加Filter来实现。Filter会在请求处理之前介入,可以重新设置Session Cookie,确保其包含`secure`和`HttpOnly`属性。需要...

    反射型xss攻击代码.rar

    Java作为一种广泛使用的后端开发语言,也可能会成为反射型XSS攻击的目标。下面我们将深入探讨这种攻击方式以及如何利用Java来实施和防御。 **一、反射型XSS攻击原理** 1. **攻击过程**:攻击者构造一个包含了恶意...

    XSS跨域攻击在web项目中的防范,基于antisamy技术

    XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全漏洞,它允许恶意用户在Web应用程序中注入可执行的脚本代码。这些注入的脚本可能在其他用户的浏览器中执行,导致敏感数据泄露、会话劫持、钓鱼攻击等...

    最新完善版XSS平台源码 【40多个模块】,xss源码下载,PHP

    HTTPOnly Cookie的设置模块则向开发者展示了如何通过设置HTTPOnly属性来阻止XSS攻击通过脚本访问Cookie。 平台也可能包含检测工具,例如XSS审计工具,它们能够帮助开发者在代码开发和审查阶段发现潜在的XSS漏洞,...

    XSS漏洞扫描 XSS漏洞扫描

    XSS(Cross-Site Scripting)漏洞扫描是网络安全领域中的一个重要话题,主要针对Web应用程序的安全检测。这种漏洞允许攻击者在用户的浏览器上注入恶意脚本,从而窃取用户数据、执行钓鱼攻击或进行其他有害操作。XSS...

    xss-labs-master.zip(xss注入通关游戏/靶场)

    `xss-labs-master`很可能包含一系列逐步增加难度的关卡,每个关卡可能模拟真实世界中的XSS漏洞场景。玩家需要找出并利用这些漏洞,提交正确的payload(注入的脚本)以过关。这样的练习可以帮助测试人员理解XSS攻击的...

    java防止xss注入.rar 附案例及jar包

    XSS(Cross Site Scripting)攻击是Web应用中常见的安全问题之一,主要表现为攻击者通过在网页中插入恶意脚本,使用户在不知情的情况下执行这些脚本,从而获取用户的敏感信息或者破坏网站的正常功能。Java防止XSS...

    8、XSS 攻击的防御pdf资料

    XSS攻击的核心在于将恶意的JavaScript代码注入到网页中,当用户浏览含有这些脚本的网页时,浏览器会执行这些代码,导致用户受到攻击。 XSS攻击主要发生在用户可以输入数据的地方,如微博、留言板、聊天室等。如果...

    Xss学习研究平台源码.zip

    遵循最佳实践,比如使用Content Security Policy(CSP)、HTTPOnly cookies以及最新的安全框架,可以显著降低XSS攻击的风险。同时,定期进行安全性审计和更新代码库也是保持应用安全的重要步骤。 总之,“Xss学习...

    Ajax XSS样例

    5. 对于DOM型XSS,应谨慎处理DOM中的用户输入,避免直接将用户数据插入到JavaScript表达式中。 新浪的XSS攻击案例为我们提供了一个学习和研究实际安全问题的机会。通过深入分析这个样例,我们可以更好地理解XSS攻击...

    基于Java与HTML的Servlet之间Cookie数据共享设计源码

    通过这个设计,开发者可以在Web应用的不同Servlet之间传递用户数据,从而支持复杂的用户交互和信息处理。 该项目由25个文件组成,分布如下:18个XML配置文件负责项目的环境配置和依赖管理;2个Java源文件包含...

Global site tag (gtag.js) - Google Analytics