Мне пришлось опубликовать результаты на нашем веб-сайте, которые должны были быть опубликованы в определенное время. Поэтому я написал пружинный перехватчик, который не позволит просить пройти до указанного времени. Я также поддерживал журналы результатов, которые были удовлетворены.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>
«Все было в порядке для меня, кроме некоторых запросов, зарегистрированных до времени». - Не могли бы вы рассказать об этом немного больше. (какой запрос) – Ralph
В соответствии с логикой в перехватчике все запросы на «/» и «/ result» должны быть перехвачены, и если текущее время меньше указанного времени (1 PM), тогда запрос должен быть перенаправлен на разные страница, на которой было отображено сообщение «Результат будет опубликован в 1 час». Если запрос приходит после 1 часа дня, он должен отображать результат после регистрации времени запроса. Логика отлично работала для меня. Но в журнале говорится, что хакер мог увидеть результат до 1 вечера – paragm
еще раз: какой url был вызван «хакером»? – Ralph