Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В случае неправильной (той, которая по умолчанию, и в мануалах в интернетах) конфигурации nginx, он увидел первый заголовок, а на бэк-энд отправит второй.Покажите мне такую конфигурацию, при которой на бэкенд будет отправлен второй заголовок.
server_name xenv.darkbyte.ru;
location / {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
# nc darkbyte.ru 80
GET / HTTP/1.1
Host: xenv.darkbyte.ru
Host: evil.com
Connection: closeHTTP_HOST? Взяли вы netcat и специально послали два заголовка, получили 404. Нормальные браузеры так себя не ведут. В чем состоит проблема?Host, а завтра ещё какой-нибудь заголовок. Я так подозреваю, что эффект будет одинаковый в отношении любого заголовка: php-скрипт увидит только последний из присланных. Содержимое HTTP_ — это в любом случае данные полученные от пользователя, и программист, который не выучил, что нельзя доверять данным присланным пользователем — просто некомпетентен. Возможно, что это повод вообще отказаться от такого приложения, безоспасность которого опирается на HTTP_*.fastcgi_params содержит исключительно подборку переменных окружения из RFC 3875 и не более.HTTP_HOST.А tcpdump умеет слушать файловые сокеты? Если нет, то чем можно? Сходу не смог найти подходящей утилиты.Можно strace-ом посмотреть.
И если есть возможность на уровне веб сервера хоть немного прикрыть дыры приложений, которые за ним прячутся, то я не упускаю такой возможности.
$args на SQL инъекции. А особо озабоченные проблемой люди даже специальный модуль разработали. Но это палка о двух концах.HTTP_HOST среди переменных окружения никто не обещал. Попытка её активно использовать — это уже нестандарт, и если вам действительно нужно как-то пробрасывать относительно валидный хост на бэкенд и вы по каким-то причинам очень не желаете использовать SERVER_NAME (специально для того предназначенную, и описанную в спецификации с словом MUST), то лучше для этого придумать какую-нибудь свою переменную, не пересекающуюся с заголовками:fastcgi_param MY_HOST xenv.darkbyte.ru; — будет намного правильнее.На третьем запросе сервера «посыпались». И нет ни одного ответа «HTTP/1.0 200 OK».И не должно быть.
Исключение составили DevConf, e-Legion Ltd. и Intel. Первые два используют nginx, поэтому проблема, скорее всего, именно в его настройкеНет, проблема может быть, и скорее всего, в бэкенде. Nginx сам никогда не выдаст
INTERNAL SERVER ERROR в верхнем регистре.На третьем запросе сервера «посыпались». И нет ни одного ответа «HTTP/1.0 200 OK».
И не должно быть.
Двуликий REQUEST_URI или в поисках корректного HTTP/1.1 сервера