Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
<BBB><br>
CCC
</body>
</html>
Выглядеть он будет так:
Как видите, текст корректно преобразован в HTML-документ.
Вы, наверное, уже обратили внимание на то, что описанный подход очень похож на подход предыдущего раздела. Действительно, по адресу /cgi-bin/para.cgi/action/1.para мы увидим почти то же самое. «Почти» потому, что в этом случае переменной REDIRECT_URL уже не будет. Если бы мы использовали вместо неё PATH_INFO, то скрипт вообще «не почувствовал» бы разницы, будь он вызван как /cgi-bin/para.cgi/action/1.para или как /action/1.para.
Но самое интересное – сходства этих двух подходов на этом не заканчиваются. Оказывается, что и при Action-подходе сервер не проверяет, существует ли файл на самом деле! При обращении к любому файлу с расширением .para (в директории /action), независимо от того, существует ли файл, вызывается скрипт /cgi-bin/para.cgi. Даже REDIRECT_STATUS сохраняет значение 200. То есть все замечания относительно безопасности остаются в силе.
А теперь вопрос «на засыпку»: как отреагирует сервер на запросы /action/dir/1.para, /action/dir.para/1.para, /action/dir.para/1.text?
Естественно, ни директории /action/dir, ни директории /action/dir.para не существует.
Правильный ответ таков: в первом случае возникнет ошибка 404. Её бы не возникло, если бы /action/dir существовала, даже в том случае, если сам файл /action/dir/1.para отсутствовал. Во втором и третьем случаях будет как ни в чем не бывало вызван скрипт /cgi-bin/para.cgi.
Теперь, я думаю, читатель догадывается, как можно решить задачу, обозначенную в последнем абзаце предыдущего раздела.
Например, мы можем создать директорию /color и разместить в ней .htaccess со следующей директивой:
Action text/html /cgi-bin/pi.cgi
Кстати, обратите внимание, в этом примере мы обошлись без директивы AddHandler, так как обработчик привязан к определённому MIME-типу.
Теперь мы можем запустить pi.cgi двумя способами.
Первый – создать в директории /color директории, соответствующие необходимым цветам, скажем gray и green. Теперь по адресу /color/green/1.html мы обнаружим систему «зелёных» документов.
Обратите внимание: если директория /color/cyan не существует, то запрос документа /color/cyan/1.html вызовет ошибку 404.
Второй способ (внимание! это может быть потенциальная дыра в системе безопасности) – обратиться по адресу /color/hole.html/cyan/1.html. При этом директория hole.html не должна существовать. Теперь наличие расширения .html у директории hole.html приведёт к запуску pi.cgi, а он будет рассматривать только последние две компоненты пути – cyan и 1.html. Таким образом всё сработает «как часы». Так можно получить документ любого цвета, если на сервере не выполняется никаких проверок (как это сделано в нашем беспечном pi.cgi).