Я работаю над реализацией веб-ошибки JavaScript, которая будет вставлена на веб-страницы нашего клиента. Одной из особенностей, которую хотели бы наши клиенты, является способ передать фрагменты HTML на своих веб-страницах на наш сервер через веб-ошибку. Мы используем JSONP, а сервер, на котором размещается ошибка JavaScript, отличается от сервера, на котором размещена страница. Основная идея заключается в следующем:JavaScript-головоломка для безопасности с XSS
var element = document.getElementById(id);
var html = element.innerHTML;
//Encodes HTML into GET request www.example.com/script?html=encodedhtml
var url = getSrcUrl(html);
document.write(unescape("%3Cscript src='" + url + "' type='text/javascript'%3E%3C/script%3E"));
Проблема безопасности является то, что кто-то может сделать запрос GET к нашему серверу с произвольным HTML, который не с веб-страницы, на котором размещается веб-ошибка. Есть ли способ сделать это безопасным?
Я знаю, что мы можем проверить HTTP-заголовки для реферера, но это легко подделать. Я видел некоторые идеи, когда сервер передавал уникальный токен, который должен был быть возвращен в запросе GET, но похоже, что это тоже можно подделать.
Моя догадка заключается в том, что то, что мы пытаемся сделать, невозможно сделать безопасно, но я хотел отбросить это сообщество, чтобы узнать, есть ли что-то умное, что можно сделать. В противном случае мне придется создать экранный скребок, который загружает страницы непосредственно у наших клиентов и извлекает соответствующий HTML для их страницы.
Спасибо за любую помощь!
EDIT
Чтобы быть ясно, веб-страница нашего клиента является общедоступной сторона без обеспечения. Другими словами, любой пользователь Интернета мог бы посетить страницу и выполнить ошибку JavaScript, которая представляет HTML-фрагмент.
EDIT 2
Приемлемый ответ "это невозможно"! Если это так, и вы даете хорошее объяснение, почему, я выберу его как принятый ответ.
EDIT 3
Что мы строим это своего рода система Google Analytics для наших клиентов. Мы пытаемся отслеживать посещения уникальных «элементов» каждым посетителем, а затем автоматически собираем информацию об этом элементе через фрагмент HTML. Затем мы вставим информацию об элементе на другие страницы, введя фрагмент HTML, который мы собрали из исходного элемента. Мы стараемся делать все это, не требуя от наших клиентов устанавливать что-либо на своих серверах и просто исключая веб-ошибку JavaScript в их HTML.
Что вы делаете с HTML? – Quentin
HTML-фрагменты в конечном итоге будут добавляться в другие веб-страницы. Настоящий рецепт катастрофы XSS, если мы не сделаем это безопасно! – user27478
При каких условиях? Вероятно, это поможет нам понять проблему, если вы сделаете шаг назад и объясните, чего вы пытаетесь достичь, а не просто, как вы пытались ее достичь. – Quentin