Мне нужно запретить символы, которые вызывают уязвимости
Ну, конечно, вам нужно для URL-кодирования, как уже говорилось в ответах. Но разве не кодировка URL вызывает уязвимости? Ну обычно не напрямую; в основном это просто разрывает ваше приложение при вводе неожиданных символов.
Если мы говорим о «уязвимостях» сети, то сегодня наиболее распространенными из них являются:
- На стороне сервера внедрение кода , ставя под угрозу ваш сервер
- SQL-инъекция , скомпрометировав вашу базу данных
- Внедрение HTML, позволяющее межсайтовый скриптинг (XSS) атаки против ваших пользователей
- Непроверенные действия, позволяющие подделка межсайтовых запросов (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».