Если вы передаете свои данные стандартным объектам .NET Framework, то они должны обрабатывать свою собственную очистку. Вы должны думать о данных, которые вам нужны для очистки, как о всех данных, с которыми .NET не знает, как обращаться. то есть данные, для которых платформа .NET не знает, для чего она будет использоваться.
Например, .NET Framework не будет знать, что строковое значение должно использоваться в качестве номера социального страхования. Если вы передаете это в стороннюю систему, либо напрямую, либо сохраняете в базе данных, а затем передаете позже, вы захотите санировать и проверить ввод, чтобы убедиться, что номер социального страхования находится в ожидаемом формат. Невыполнение этого требования может сделать вашу систему уязвимой для атак из-за уязвимостей в сторонней системе. например введенный номер социального страхования, содержащий определенные символы, может вызвать сбой сторонней системы, что, в свою очередь, может привести к отказу в обслуживании вашей системы, поскольку она пытается связаться с неработающей службой. Этот сценарий является лишь одной из многих возможностей, он не обязательно должен приводить к атаке DOS, но в конечном итоге вы захотите проверить и дезинфицировать входные данные для защиты от неизвестного.
Как вы, в частности, упомянули XSS, это уязвимость, которой на самом деле подвержены стандартные веб-элементы управления .NET, если не активирован параметр проверки по умолчанию (см. http://www.asp.net/whitepapers/request-validation).). Это связано с тем, что веб-элементы управления .NET не следует автоматически кодировать символы HTML при установке свойства Text. Поэтому, если вы запускаете свой сайт без проверки запроса, вы должны убедиться, что все выходные данные правильно закодированы (это форма очистки вывода). Учитывая выбор, я бы разрабатывать с использованием инфраструктуры MVC, а не веб-форм, поскольку она упрощает использование очистки выходных данных HTML (например, использование скобок <%:%> автоматически закодирует HTML-вывод). Это позволяет вашему приложению корректно обрабатывать вредоносные (и не вредоносные) <script>
тегов вводятся во вход без необходимости проверки, так как выходные данные должным образом очищены, поэтому, если ваше приложение защищено таким образом, проверка запросов может быть отключена, что является моим предпочтительным вариантом, так как тогда вы не манипулировать пользовательским вводом без необходимости. Например, если SO очистит входные данные и удалит теги <script>
, я не смогу включить их в это сообщение.
Еще один тип очистки, который часто встречается в веб-приложениях, - это правильное форматирование строк, которые будут вставлены в JavaScript (например, символы одинарных и двойных кавычек). Короче говоря, вы защищаетесь от того, что пользователь вставляет вредоносный JavaScript через ввод, который будет отображаться для другого пользователя и выполняться, если не будет должным образом очищен, и при выполнении запрос будет выполняться как новый пользователь, который может иметь более высокий уровень безопасности. в приложении и возможны всевозможные повреждения.