О боже, много ответов, много хороших моментов, так что рассыпайтесь, так что позвольте мне попытаться объединить все это. tl; dr imo, это слишком низкий уровень для кода прикладного уровня.
Да, URL может иметь длину любой , но на практике браузеры имеют ограничение. Конечно, это защищает вас от атак на браузер только тех людей, которые хотят ограничить себя этими векторами, поэтому вам нужен какой-то способ обработки активных попыток атаки.
Хорошо, это может защитить от переполнения буфера. Ну, только если вы работаете на низком уровне и не думаете о таких проблемах. Большинство языков в наши дни поддерживают строки довольно хорошо и не позволяют им просто переполняться. Если вы имели дело с какой-то очень низкоуровневой системой, фактически считывая данные в виде байтов и переводя их в строковый тип, то, конечно, у вас должен быть какой-то способ обнаружить и обработать это, но не так уж сложно выделить память, и передавайте известные суммы за раз, просто следите за тем, сколько памяти вы откладываете. Честно говоря, если вы имеете дело с этим низким уровнем, вам действительно следует использовать что-то еще.
Хорошо, а как насчет простого отклонения на основе длины строки? Основным недостатком этого является потенциал для ложного чувства безопасности. Иными словами, некоторые области кода могут быть «неаккуратными» и уязвимыми для тех самых эксплойтов, которые вы пытаетесь избежать. Вы, безусловно, должны быть осторожны, чтобы убедиться, что этот «глобальный» лимит на самом деле достаточен, но, учитывая ваш формат URI, вы можете иметь возможность, чтобы эти «части» сообщали, какова их максимальная длина, и централизовали проверку длины ( вся строка и ее составляющие); по крайней мере, таким образом, если одна часть должна допускать более длинную строку, легче справиться с изменением.
Это, конечно, имеет некоторые преимущества, например, очень быстро иметь возможность сравнивать длину строки и сразу отклонять запрос ... но не забывайте быть «хорошо себя вести» сайте вы должны отправить правильный ответ, объясняющий, почему сервер отклоняет это. Однако на практике вы действительно думаете, что вам придется справляться с таким количеством «неправильных» URL-адресов, несомненно, они будут ошибаться во многих других отношениях.
Почему-то вам не хотелось говорить, какой язык вы используете. В языках высокого уровня, таких как Java или Python, есть несколько очень хороших библиотек для работы с «веб-материалами». Java позволит вам указывать шаблоны для URI, включая использование регулярных выражений для этого шаблона, поэтому, если вам нужно имя в URL, вы можете иметь что-то вроде @Path("/person/(.{0..100}")
, чтобы ограничить параметр до 100 символов. Я был бы удивлен, если бы подобие Ruby или Python не имело эквивалента, они хотели бы рекламировать себя в качестве хороших веб-языков.
Наконец, независимо от длины, есть множество вещей, которые вам нужно будет проверить, а не только длина. Необходимость беспокоиться о длине URI, вызывающей переполнение буфера, - вещь очень низкого уровня, и она должна быть очень общей, то есть должна обрабатывать любой запрос, даже один с потенциально URI 1 ГБ; заметьте, я сказал «обрабатывать», а не «принять его и передать его на прикладной уровень», он может отклонить его на этом низком уровне, что также может вызвать системные события.