Бобы Spring доступа от сервлета в JBoss

** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки SQL-инъекции не только полагаются на возможность вставлять X=Y. **

Если злоумышленники пытаются взломать форму с помощью переменной PHP $_GET или с помощью строки запроса URL, вы сможете поймать их, если они не защищены.

RewriteCond %{QUERY_STRING} ([0-9]+)=([0-9]+)
RewriteRule ^(.*) ^/track.php

Поскольку 1=1, 2=2, 1=2, 2=1, 1+1=2 и т. д. ... являются распространенными вопросами к базе данных SQL злоумышленника. Возможно, он также используется многими хакерскими приложениями.

Но вы должны быть осторожны, чтобы не переписывать безопасный запрос с вашего сайта. Вышеупомянутый код дает вам возможность переписать или перенаправить (зависит от вас) эту динамическую строку запроса, зависящую от хакерства, на страницу, в которой будет храниться IP-адрес злоумышленника или EVEN THEIR COOKIES, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.

24
задан Oliver Drotbohm 2 September 2015 в 12:16
поделиться

3 ответа

Ваш сервлет может использовать WebApplicationContextUtils для получения контекста приложения, но тогда код сервлета будет иметь прямую зависимость от Платформы Spring.

Другое решение, настраивают контекст приложения для экспорта боба Spring в контекст сервлета как атрибут:

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
  <property name="attributes">
    <map>
      <entry key="jobbie" value-ref="springifiedJobbie"/>
    </map>
  </property>
</bean>

Ваш сервлет может получить боб от контекста сервлета с помощью

SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");
31
ответ дан Chin Huang 28 November 2019 в 22:11
поделиться

Я нашел один способ сделать это:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");
8
ответ дан Sophie Gage 28 November 2019 в 22:11
поделиться

Есть гораздо более сложный способ сделать это. Существует SpringBeanAutowiringSupportвнутри org.springframework.web.context.support, который позволяет построить что-то вроде этого:

public class MyServlet extends HttpServlet {

  @Autowired
  private MyService myService;

  public void init(ServletConfig config) {
    super.init(config);
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
      config.getServletContext());
  }
}

Это заставит Spring искать ApplicationContext, привязанный к этому ServletContext (например. например, созданный через ContextLoaderListener) и инжектировать бобы Spring, доступные в этом ApplicationContext.

60
ответ дан 28 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: