Какие символы небезопасны в строках запроса? - PullRequest
6 голосов
/ 07 апреля 2009

Мне нужно запретить символы, которые вызывают уязвимости в URL

URL моего образца http://localhost/add.aspx?id=4;req=4

Пожалуйста, дайте список символов, которые мне нужно заблокировать.

Я использую веб-страницу ASP.net. Я связываю информацию из базы данных sql server.

Я просто хочу перечислить символы, чтобы держаться подальше от хакеров, чтобы вводить нежелательные строки в URL

Ответы [ 4 ]

7 голосов
/ 07 апреля 2009

В зависимости от того, какую технологию вы используете, обычно есть встроенная функция, которая справится с этим для вас.

ASP.NET (VB) и классический ASP

myUrl = Server.UrlEncode(myUrl)

ASP.NET (C #)

myUrl = Server.UrlEncode(myUrl);

PHP

$myUrl = urlencode($myurl);

Если вы просто хотите удалить небезопасные символы , вам понадобится регулярное выражение. RFC 1738 определяет, какие символы небезопасны для URL:

Опасное:

Персонажи могут быть небезопасны для ряд причин. Пространство
персонаж небезопасен, потому что значительные пробелы могут исчезнуть и
незначительные пробелы могут быть введены когда транскрибируются URL или
набрано или подвергнуто лечению программ для обработки текста. символы "<" и ">" небезопасны потому что они используются как
разделители вокруг URL в свободном тексте; знак кавычки ("" ") используется для
Разделяйте URL-адреса в некоторых системах. символ "#" небезопасен и должен
всегда кодируется, потому что он используется во всемирной паутине и в других
системы для разграничения URL от идентификатор фрагмента / якоря, который может следуй за этим. Символ "%" является небезопасно, потому что используется для
кодировки других символов. Другой символы небезопасны, потому что
шлюзы и другие транспортные агенты Известно, что иногда модифицируют такие персонажи. Эти символы "{", "}", "|", "\", "^", "~", "[", "]", и "` ".

3 голосов
/ 07 апреля 2009

Мне нужно запретить символы, которые вызывают уязвимости

Ну, конечно, вам нужно для URL-кодирования, как уже говорилось в ответах. Но разве не кодировка URL вызывает уязвимости? Ну обычно не напрямую; в основном это просто разрывает ваше приложение при вводе неожиданных символов.

Если мы говорим о «уязвимостях» сети, то сегодня наиболее распространенными из них являются:

  1. На стороне сервера внедрение кода , ставя под угрозу ваш сервер
  2. SQL-инъекция , скомпрометировав вашу базу данных
  3. Внедрение HTML, позволяющее межсайтовый скриптинг (XSS) атаки против ваших пользователей
  4. Непроверенные действия, позволяющие подделка межсайтовых запросов (XSRF) атак против ваших пользователей

Это в порядке уменьшения серьезности и увеличения общности. (К счастью, немногие авторы веб-сайтов настолько глупы, чтобы передавать пользовательский ввод в system () в наши дни, но уязвимости XSS и XSRF распространены.)

Каждая из этих уязвимостей требует, чтобы вы понимали основную проблему и решали ее намеренно. Нет волшебного списка «строк, которые вам нужно заблокировать», которые защитят ваше приложение, если оно играет наивно в отношении безопасности. есть некоторые надстройки, которые делают такие вещи, как блокировка строки '' при отправке, но все, что они дают вам, это ложное чувство безопасности, поскольку они могут поймать только несколько распространенных случаев обычно легко закодировать.

Они также остановят отправку этих строк, когда вы действительно захотите их. Например, некоторые (глупые) авторы PHP отвергают все входящие апострофы как попытку обуздать SQL-инъекцию; В результате вы не можете называться «О'Рейли». D'о. Не блокировать; кодировать правильно.

Например, для защиты от внедрения SQL убедитесь, что SQL-экранирование любых строк, с которыми вы делаете запросы (или используйте параметризованные запросы, чтобы сделать это автоматически); чтобы защитить от внедрения HTML, закодируйте HTML все текстовые строки, которые вы выводите на страницу (или используйте схему шаблонов / MVC, которая сделает это автоматически).

URL моего образца http://localhost/add.aspx?id=4;req=4

Должно ли быть что-то не так с этим URL? Допустимо разделять два параметра запроса с помощью «;» вместо более распространенного «&», но многие распространенные веб-платформы, к сожалению, по-прежнему не понимают этот синтаксис по умолчанию (включая Java-сервлет и ASP.NET). Таким образом, вам нужно указать «id = 4 & req = 4» - или, если вы действительно хотите, чтобы это был один параметр с буквальной точкой с запятой, «id = 4% 3Breq% 3D4».

2 голосов
/ 07 апреля 2009
0 голосов
/ 07 октября 2009

я написал это, для красивых URL, но это, конечно, не завершено

""»,", ", ·,, *, @, =;,:,., /, +, &, $, <,>, #,%, {, (,) ,}, |, \, ^, ~, [,], -, -, - ',, "

и затем я перевожу пробелы "" и повторяющиеся пробелы для "-"

Лучше сделать это или объединить с регулярными выражениями

...