Рубрики
Uncategorized

Узнайте о яме в Tomcat в простом запросе get

Автор оригинала: David Wong.

I. Предисловие

Быстро получив требование, он завершает и проводит локальные тесты, чтобы обнаружить, что:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Поскольку данные параметра в запросе get предназначены для запроса имени человека, он содержит китайский язык, который анализируется.

II. Аналитический процесс

В то время я сразу же проконсультировался с учителем Baidu, потому что Tomcat обновился в версии, следовал спецификации RFC для URL-адресов и не выпускал специальных символов. Существует два направления решения этой проблемы:

1. Решите проблему с кодированием. 2. Версия Tomcat понижена.

Использование postman для переноса китайских параметров позволяет нормально получать доступ к данным и раньше не сталкивался с такой проблемой, поэтому сервер java не является проблемой, и служба использует spring boot 1.5.3, соответствующая версия Tomcat 8.5.14, не рассматривая развертывание как военный пакет, мы намерены начать с кодирования.

На самом деле проблема довольно проста. Но из-за рамок дизайна услуг мы пошли по неправильному пути… Я хочу записать процесс анализа.

Посетите Tomcat с китайскими параметрами с переднего конца. В журнале доступа Tomcat вы можете видеть, что запрос с китайскими параметрами выглядит следующим образом:

[18/Jun/2019:19:51:18 +0800] 0:0:0:0:0:0:0:1 "GET null null" 400 (0 ms)

Запрос был отфильтрован до того, как он поступил.

Я закодировал параметры в JS

window.location.href='?p=ware&d=ware-register-query&agentName='+encodeURI($(".agent").val());

Параметры закодированы здесь и признаны бесполезными. Лучшее мышление озадачено.

На самом деле, поскольку мы являемся архитектурой HTML + PHP + java, запросы обрабатываются PHP, а затем отправляются в фон Java. Параметры, закодированные в JS, автоматически декодируются при отправке в обработку PHP:

Var_dump (check_merchant_query.'? Agent Name='. $_GET['agent Name']); // URL of print stitching
$req = new httpRequest('get',check_merchant_query.'?agentName='.$_GET['agentName'],null,function($result){return $result;});

Результат, напечатанный здесь, был расшифрован, и в то время я этого не заметил. Я просто подумал, что URL-адрес был правильным, так что это заняло много времени. Учитывая, что параметры get HTTP-запросов, построенных на PHP, были закодированы, в следующий раз я расскажу о том, как настроить Tomcat на выпуск специальных символов.

Если это обычный HTML + java, то приведенное выше кодирование не является проблемой, но когда анализ забыл пройти обработку PHP.

Наконец, мы можем закодировать параметры на Php.

$req = new httpRequest('get',check_merchant_query.'?agentName='.urlencode($_GET['agentName']),null,function($result){return $result;});

Почему почтальон может вводить китайские параметры и напрямую обращаться к Tomcat? Поскольку postman похож на браузер, он закодировал параметры при отправке запроса.

Оригинал: “https://developpaper.com/learn-about-a-pit-in-tomcat-in-a-simple-get-request/”