У меня есть чат-сайт, и я хочу знать, безопасен ли он XSS. Позвольте мне объяснить, что такое мой метод.Является ли мой метод полностью безопасным для xss
Я использую этот JQuery код для добавления новых сообщений в экране, которые поступающие от Ajax запроса:
$("#message").prepend(req.msg);
Я знаю, что уязвима, но сообщения на БД кодируются. Поэтому, когда я отправить это сообщение полезной нагрузки:
<text>TEST</test>
Он хранится на базе данных кодируются:
<text>TEST</test>
Я знаю, что сценарий, который в обход .htmlentities() функцию в this ответ. Коротко:
<input value=<%= HtmlEncode(somevar) %> id=textbox>
Если мы посылаем a onclick=alert(document.cookie)
вход в этот HTML код, он будет:
<input value=a onclick=alert(document.cookie) id=textbox>
Таким образом, в этом случае кодирования < > ; &
символы не могут спасти нас. Но я не писал свой код, как это, поэтому я думаю, что я защищен от этой уязвимости. Мой сервер отвечает на JSON как это:
..."msg" : "<tr><td><b>user:<\b> <text>TEST</test><\td><\tr>",...
И я прямо .prepend() в "MSG" данные в страницу. Я думаю, что это полностью безопасно. Хакер должен использовать < > ; &
символов для XSS. Я также кодирую \
как \\
. Но, может быть, я что-то упустил. Это полностью безопасно?
Я бы не сохранил HTML-экранированные данные в базе данных, я бы просто вставлял их на страницу, используя текстовый синтаксический анализатор вместо парсера HTML. И я бы обернул все значения атрибутов в кавычки и скрыл кавычки во вставленном контенте. – Oriol
Прошу прощения, но что вы «вставляете» в страницу? Вы предлагаете хранить сообщения без сохранения, а затем избегать их во время выполнения перед печатью? Что-то меняет? – Unhappy
Например, '$ (" # message "). Prepend (document.createTextNode (req.msg));' будет добавлять текстовый узел вместо разбора 'req.msg' как HTML. – Oriol