2015-03-28 2 views
0

Я написал простой webapp для себя, чтобы иметь возможность редактировать файлы на моем сервере, когда я нахожусь в месте, которое позволяет использовать только http и https-порты ...Почему я получаю ошибки HTTP 501 для некоторых запросов?

Но я столкнулся с этой странной проблемой ,

Обычно эти заголовки обмениваются при сохранении файла (конфиденциальная информация удалена):

https://example.com/? 

POST /? HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: hu-HU,en-US;q=0.8,hu;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Referer: https://example.com/?path=/home/csirmazd/public_html/[...]/fs/view/login.php&view=preview 
Cookie: [...] 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 644 
[...] 

HTTP/1.1 303 See Other 
Date: Sat, 28 Mar 2015 14:57:40 GMT 
Server: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
X-Powered-By: PHP/5.4.36 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Location: ?path=/home/csirmazd/public_html/[...]/fs/view/login.php&view=preview 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 
---------------------------------------------------------- 
https://example.com/?path=/home/csirmazd/public_html/[...]/fs/view/login.php&view=preview 

GET /?path=/home/csirmazd/public_html/[...]/fs/view/login.php&view=preview HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: hu-HU,en-US;q=0.8,hu;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Referer: https://example.com/?path=/home/csirmazd/public_html/[...]/fs/view/login.php&view=preview 
Cookie: [...] 
Connection: keep-alive 

HTTP/1.1 200 OK 
Date: Sat, 28 Mar 2015 14:57:40 GMT 
Server: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
X-Powered-By: PHP/5.4.36 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Keep-Alive: timeout=5, max=99 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=utf-8 
---------------------------------------------------------- 

Но когда я пытаюсь сохранить еще один конкретный файл, а именно dir.php что-то другое:

https://example.com/? 

POST /? HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: hu-HU,en-US;q=0.8,hu;q=0.5,en;q=0.3 
Accept-Encoding: gzip, deflate 
DNT: 1 
Referer: https://example.com/?path=/home/csirmazd/public_html/[...]/fs/view/dir.php&view=preview 
Cookie: [...] 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 4604 
[...] 

HTTP/1.1 501 Method Not Implemented 
Date: Sat, 28 Mar 2015 15:03:04 GMT 
Server: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
Allow: TRACE 
Content-Length: 458 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 
X-Pad: avoid browser bug 
---------------------------------------------------------- 

И сообщение в браузере

GET to/not supported. 

Что? Тогда почему это работает на все остальное?

Подходящий PHP-код вообще не вызывается.

Сначала я подумал, что это багги .htaccess. Но если я помню, я отключил его, имея в нем RewriteEngine On в корневом каталоге. Поэтому я не думаю, что это проблема. (Он по-прежнему обрабатывает example.com/ путем вызова index.php для него.)

Моя вторая мысль была о том, что максимальный размер запросов POST очень мало. Но я могу редактировать большие файлы без проблем.

Теперь у меня кончились идеи, я не знаю, где искать.

Любые идеи?

ответ

0

Кажется, что корень проблемы - модуль ModSecurity на сервере Apache, установленный хостинг-провайдером.

Как others had issues with it too on a different site.

Итак, я попробовал эксперимент и отправил один и тот же контент в случайный URI и получил ту же ошибку, что и раньше. Очевидно, что это не нравится, когда вы отправляете код из форм.

Таким образом, очевидное решение отключает его.

В моем конкретном случае в моей cPanel нет опции, чтобы отключить его, поэтому мне удалось обойти его с помощью base64, кодирующего содержимое формы на стороне клиента.

Смежные вопросы