Apache Tomcat отключает связь с ошибкой 400 и никакое объяснение с определенными URL-адресами [duplicate]

Я думаю, что это должно сделать трюк. Я просто добавил if(isset и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>
3
задан John Brink 25 March 2016 в 15:19
поделиться

2 ответа

У вас есть косая черта «/», закодированная в URL-адресе. Apache не допускает их из-за потенциальных атак. Для этого есть настройка:

System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");

или

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

См. Аналогичный пост .

5
ответ дан Community 22 August 2018 в 09:04
поделиться
  • 1
    Для всех, кого это интересует, я решил повернуть зашифрованный идентификатор и заменить его произвольно созданным маркером, сохраненным в БД. Спасибо за совет. – John Brink 25 March 2016 в 16:07
  • 2
    Привет, пожалуйста, где я могу изменить эти параметры? БЛАГОДАРЯ – Aziz 23 November 2016 в 20:23
  • 3
    когда вы запускаете свою JVM, вы можете предоставить -D, см. ответ -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true, или вы можете установитьProperty в коде. Ответьте на это – Dennis R 28 November 2016 в 17:44
  • 4
    Вы также можете добавить строку org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true в conf/catalina.properties, что, вероятно, является лучшим способом для этого. – Jules 27 February 2018 в 10:41

Вероятно, у вас есть одна из двух проблем:

1) Вы не включили порт в свой URL. Либо вы настроили порт Tomcat на порт 80, и в этом случае порт не нужен, либо вам нужно включить порт, который по умолчанию равен 8080, например:

http://localhost:8080/file/demo/%2Be4%2FE5cR%2FaM%3D

2) Вы добавляя зашифрованный идентификатор как часть самого URL-адреса, который должен быть сопоставлен с сервлетом / JSP / представлением какого-либо типа в ваших сопоставлениях URL-адресов и вряд ли. Tomcat не узнает уникальный идентификатор и не знает соответствующего обработчика для вызова процесса обработки. Предполагая, что вы намереваетесь вызывать сервлет / JSP / контроллер, который сопоставляется с '/ file / demo', вы скорее захотите передать идентификатор в качестве параметра запроса, например:

http://localhost:8080/file/demo?id=%2Be4%2FE5cR%2FaM%3D
0
ответ дан pczeus 22 August 2018 в 09:04
поделиться
Другие вопросы по тегам:

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