LINUX.ORG.RU

Обработка урлов со знаком "?" без PHP

 


0

1

Здравствуйте.

Есть статический сайт, загруженный из Вебархива. Как сделать чтобы сервер не обрабатывал урлы со знаком «?» То есть чтобы сервер воспринимал знак вопроса как обычный символ и не обрабатывал его, чтобы можно было переходить по таким урлам. Например /index.php?do=page.html

Надо сохранить оригинальную структуру. Я где-то слышал что нужно вставить спецсимволы в URL или в названия файлов, но не знаю какие символы.



Последнее исправление: enalesck (всего исправлений: 4)

Бэк не обязательно писать на PHP.

Nervous ★★★★★
()
Ответ на: комментарий от enalesck

Псевдокод на фласке, возможно нерабочий:

import os.path

from flask import Flask, request, send_file

app = Flask(__name__)


@app.route("/index.php")
def index():
    fn = request.args.get("do")
    if not fn:
        return "", 400
    try:
        return send_file(os.path.join('/srv/www/test', fn), attachment_filename=os.path.basename(fn))
    except OSError:
        return "", 404
    except Exception:
        return "", 500

Если решишь заюзать, то тебе нужен либо mod_wsgi, либо Gunicorn. И смотри чтобы доступа за пределы указанной директории не было.

WitcherGeralt ★★
()
Ответ на: комментарий от no-such-file

Garbage in garbage out

Задача всё равно не ясна. Он мог бы просто нормально поименовать страницы и поправить ссылки седом, не маясь дурью.

WitcherGeralt ★★
()

Пройтись по ссылкам и заменить index.php?do=page.html на ссылку на соответствующую страницу?

fernandos ★★★
()

Есть статический сайт, загруженный из Вебархива.

Это нужно было делать во время загрузки из Вебархива

goingUp ★★★★★
()

Я где-то слышал что нужно вставить спецсимволы в URL или в названия файлов, но не знаю какие символы.

Можно заменить ? в ссылках на %3F. Правда, не знаю, можно ли это в .htaccess сделать.

Korchevatel ★★★★★
()

Решал именно эту задачу с вебархивом иначе: писал свой обработчик (небольшой), роутил все запросы на него, а он уже отдавал нужный файл. Популярные сервисы по парсингу вебархива примерно так и делают.

anonymous
()
Ответ на: комментарий от no-such-file

Ну так логично заменить index.php?do=page.html на путь к page.html.

fernandos ★★★
()

Все вызовы направляй в один файл, в нем сделай роутер на основе $_SERVER[‘REQUEST_URI’]. Самая ленивая идея, конечно, чуть постаравшись, можно сделать намного лучше. Но тогда бы и вопроса не было. :)

anonymous
()
  • переименуй поиском по маске имена файлов в нормальный формат;
  • ссылки внутри html не трогай и настрой перенаправления в Nginx.
  • профит
atiradeon
()
Ответ на: комментарий от WitcherGeralt

?do=../../../etc/passwd такого рода уязвимости назывались php-injection. там обычно в коде было что-то типа include 'includes/' . $_GET['do'] . '.php'; с отключенным выводом ошибок

tz4678 ★★
()
Ответ на: комментарий от tz4678

забыл написать, что расширение отсекалось url-encoded null-байтом. это, кажись, %00, те правильно ?do=../../../etc/passwd%00

tz4678 ★★
()
Ответ на: комментарий от tz4678

иногда стояли примитивные системы фильтрации запросов, которые не пропускали %00, тогда помогало двойное кодирование encodeURI(encodeURI('\0')) -> %2500

tz4678 ★★
()
Ответ на: комментарий от tz4678

И смотри чтобы доступа за пределы указанной директории не было

Ты же умеешь читать, не так ли?

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.