html / XSS escape на входе против выхода

Из всего, что я видел, похоже, что условием экранирования html на вводимом пользователем контенте (в целях предотвращения XSS) является его использование при рендеринге контента. Большинство шаблонных языков, кажется, делают это по умолчанию, и я сталкивался с такими вещами, какэтот ответ stackoverflow утверждая, что эта логика является работой уровня представления.

Итак, мой вопрос, почему это так? Мне кажется более чистым избегать ввода (т. Е. Проверки формы или модели), поэтому вы можете работать в предположении, что что-либо в базе данных безопасно отображать на странице по следующим причинам:

Variety of output formats - for a modern web app, you may be using a combination of server-side html rendering, a javascript web app using ajax/JSON, and mobile app that receives JSON (and which may or may not have some webviews, which may be javascript apps or server-rendered html). So you have to deal with html escaping all over the place. But input will always get instantiated as a model (and validated) before being saved to db, and your models can all inherit from the same base class.

You already have to be careful about input to prevent code-injection attacks (granted this is usually abstracted to the ORM or db cursor, but still), so why not also worry about html escaping here so you don't have to worry about anything security-related on output?

Я хотел бы услышать аргументы относительно того, почему html, избегающий на рендере страницы, предпочтен

Ответы на вопрос(2)

Ваш ответ на вопрос