Это вопрос, который задавался ранее, но я не нашел информацию, которую я ищу, или, возможно, я просто упускаю суть, поэтому, пожалуйста, потерпите меня. Я всегда могу скорректировать свой вопрос, если задаю его неправильно.
Если, например, у меня есть конечная точка POST, которая использует просто объект DTO с 2 свойствами (то есть companyRequestDto) и содержит тег script водно из его свойств. Когда я вызываю свою конечную точку из Postman
, я использую следующее:
{
"company": "My Company<script>alert(1);</script>",
"description": "This is a description"
}
Когда она получена действием в моей конечной точке,
public void Post(CompanyRequestDto companyRequestDto)
мой объект DTO будет автоматически установлени его свойства будут установлены на:
companyDto.Company = "My Brand<script>alert(1);</script>";
companyDto.Description = "This is a description";
Я явно не хочу, чтобы эта информация сохранялась в нашей базе данных как есть, и при этом я не хочу, чтобы она сохранялась как экранированная строка, как показано выше.
1) Запрос: Итак, мой первый вопрос: как вывести ошибку, если опубликованный DTO содержит недопустимое содержимое, например тег?
Я смотрел на MicrosoftAntiXss, но я не понимаю, как с этим справиться, так как данные, представленные в свойствах объекта DTO, не являются строкой html, а просто строкой, так что мне здесь не хватает, так как я не понимаю, как это помогает санации илипроверка переданных данных.
Когда я звоню
var test = AntiXss.AntiXssEncoder.HtmlEncode(companyRequestDto.Company, true);
Возвращает закодированную строку, но что тогда ??
Есть ли способ удалить запрещенные ключевые слова или простопросто скинуть ошибку?
2) Ответ: Предполагая, что 1) не был реализован или не работал должным образом, и он в конечном итоге был сохранен в нашей базе данных, я должен возвращать закодированные данные в виде строки json, поэтомувместо возврата:
"My company"
Должен ли я вернуть:
"My Company<script>alert(1)</script>"
Должен ли браузер (или любое другое приложение) отображаться так, как показано ниже?:
"My Company<script>alert(1)</script>"
3) Код: Предполагая, что есть способ санировать или выдавать ошибку, должен ли я использовать это на уровне свойств, используя атрибут во всех свойствах моих различных объектов DTO или есть способприменить это на уровне класса, используя атрибут, который будет проверять и / или дезинфицировать все строковые свойства объекта DTO, например?
Я нашел интересные статьи, но ни одна из них действительно не отвечает на мои проблемы, или у меня другие проблемыс некоторыми ответами:
asp.net mvc В чем разница между AntiXss.HtmlEncode и HttpUtility.HtmlEncode?
Остановка XSS при использовании WebAPI (в настоящее время изучаю этот, но не вижу, как пример решает проблему, так как свойство всегда терпит неудачу, использую ли ятег сценария или нет)
как санировать входные данные в веб-интерфейсе с помощью анти-xss-атаки (также на этот раз, но возникла проблема с вызовом ReadFromStreamAsync
из моего проекта на работе. Может быть, до некоторых настроек в моем web.config, но не выяснил, почему, но всегда кажется, что возвращает пустую строку)
Спасибо.
ОБНОВЛЕНИЕ 1:
Я только что закончил получать ответ от Остановка XSS при использовании WebAPI
Этовероятно, самый близкий к тому, что я ищу. За исключением того, что я не хочу кодировать данные, так как я не хочу хранить их в своей базе данных, поэтому я посмотрю, смогу ли я выяснить, как выдать ошибку, но я не уверен, каково будет условие,Может быть, я должен просто искать такие символы, как <,>,;и т. д. ... так как они вряд ли будут использоваться ни в одном из наших полей.