2014-06-19 3 views
-1

Мне пришлось опубликовать результаты на нашем веб-сайте, которые должны были быть опубликованы в определенное время. Поэтому я написал пружинный перехватчик, который не позволит просить пройти до указанного времени. Я также поддерживал журналы результатов, которые были удовлетворены.Spring MVC HandlerInterceptor hack

Все работало отлично для меня, за исключением некоторого запроса, зарегистрированного до времени. Это означает, что кому-то удалось обойти перехватчик и увидеть результат до времени.

Может ли кто-нибудь сказать мне, как злоумышленник видит результат до времени? Я использую Spring MVC и Spring JDBC в своем приложении.

Interceptor -

import java.util.Calendar; 
import java.util.Date; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Component; 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 

public class ResultTimeCheckerInterceptor extends HandlerInterceptorAdapter { 
    private Date resultPublishTime; 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 

     Calendar cal = Calendar.getInstance(); 
     long currentTime = cal.getTimeInMillis(); 

     if (currentTime < resultPublishTime.getTime()) { 
      request.getRequestDispatcher("resultNotPublished").forward(request, response); 
      return false; 
     } else { 
      return true; 
     } 

    } 

    public Date getResultPublishTime() { 
     return resultPublishTime; 
    } 

    public void setResultPublishTime(Date resultPublishTime) { 
     this.resultPublishTime = resultPublishTime; 
    } 
} 

Servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <!-- DispatcherServlet Context: defines this servlet's request-processing 
     infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 


    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
     up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
     in the /WEB-INF/views directory --> 
    <beans:bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <context:component-scan base-package="result" /> 


    <beans:bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> 
     <beans:property name="propertyEditorRegistrars"> 
      <beans:list> 
       <beans:bean class="result.propertyeditor.CustomDateEditorRegistrar" /> 
      </beans:list> 
     </beans:property> 
    </beans:bean> 

    <interceptors> 
     <interceptor> 
      <mapping path="/" /> 
      <mapping path="/result" /> 
      <beans:bean 
       class="result.intrceptor.ResultTimeCheckerInterceptor"> 
       <beans:property name="resultPublishTime" value="${result.publishTime}" /> 
      </beans:bean> 
     </interceptor> 
    </interceptors> 
    <context:property-placeholder location="classpath:property/application.properties" /> 
</beans:beans> 
+0

«Все было в порядке для меня, кроме некоторых запросов, зарегистрированных до времени». - Не могли бы вы рассказать об этом немного больше. (какой запрос) – Ralph

+0

В соответствии с логикой в ​​перехватчике все запросы на «/» и «/ result» должны быть перехвачены, и если текущее время меньше указанного времени (1 PM), тогда запрос должен быть перенаправлен на разные страница, на которой было отображено сообщение «Результат будет опубликован в 1 час». Если запрос приходит после 1 часа дня, он должен отображать результат после регистрации времени запроса. Логика отлично работала для меня. Но в журнале говорится, что хакер мог увидеть результат до 1 вечера – paragm

+0

еще раз: какой url был вызван «хакером»? – Ralph

ответ

0

попробовать это:

  • http://localhost:8080/yourApplication/result - должен был "заблокирован"
  • http://localhost:8080/yourApplication/result.html - должен был «заблокирован», но mybe это не
  • http://localhost:8080/yourApplication/result/ -? зависит от вас
  • http://localhost:8080/yourApplication/result/x -? зависит также от вас
Смежные вопросы