Специальные символы в параметре запроса
Я разрабатываю сервисы весной, и сервисы были развернуты в JBOSS 7.1.0. Пример кода для сопоставления запроса:
@RequestMapping(value=/state, method=RequestMethod.GET)
public ResponseEntity<ListStatesResponseVO> getListOfStates(@RequestParam(required=false) Long id,
@RequestParam(required=false) Long page,
@RequestParam(required=false) Long pagesize);
Моя проблема заключается в том, что когда я передаю специальные символы в параметре запроса, он возвращает мне действительный xml-ответ, но, насколько я понимаю, он должен возвращать "400 BAD REQUEST".
Пример URI:
http://localhost:8080/location-services/location/api/state?id=$%^$^$#$%^$%
Я также добавил
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
Внутри standalone.xml JBOSS.
А также
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!-- set forceEncoding to true if you want to override encoding of servlet -->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
Внутри web.xml.
Но это не решило проблему.
Есть ли какое-либо решение для этого. Заранее спасибо.
1 ответ
Вы не должны позволять пользователям самим вводить значения в строку запроса. Это плохая практика и очень рискованная для безопасности вашего веб-приложения. Чтобы избежать подобных атак и ограничить пользователей от несанкционированного доступа к URL, вы должны внедрить в свое приложение инфраструктуру HDIV.
Как только вы реализуете это, никто не может связываться с вашими URL. И если кто-то попытается сделать это, ему будут показаны ошибки "плохой запрос".
Надеюсь, это поможет вам. Приветствия.