HTML-инъекция на чужой сайт?

У меня есть продукт, который встраивается в веб-сайты аналогично Paypal (клиенты добавляют мою кнопку на свой веб-сайт, пользователи нажимают на эту кнопку, и после завершения обслуживания я перенаправляю их обратно на исходный веб-сайт).

Я хотел бы продемонстрировать свои технологии клиентам, не внося изменений в их живой сайт. Для этого можно ли настроить http://stackru.myserver.com/ таким образом, чтобы он отражал http://www.stackru.com/ при одновременном плавном введении моей кнопки?

Это означает, что я хочу продемонстрировать опыт использования моей кнопки на живом веб-сайте без фактического повторного размещения базы данных клиента на моем сервере.

Я знаю, что здесь есть проблемы с безопасностью, поэтому не стесняйтесь упоминать их, пока мы отвечаем требованиям. Мне не нужно демонстрировать это для веб-сайта, который использует HTTPS.

Более конкретно, я хотел бы продемонстрировать идею финансовых вознаграждений по вопросам Stackru, введя кнопку Paypal на страницу. Как бы мне продемонстрировать это на http://stackru.myserver.com/ без изменения https://stackru.com/?

ЗАПРОС, ЧТОБЫ ОТКРЫТЬ: Я перефразировал вопрос, чтобы он был более конкретным для вашего запроса. Если вы все еще считаете, что он слишком широк, пожалуйста, помогите мне понять ваши аргументы, разместив комментарий ниже.

ОБНОВЛЕНИЕ: я опубликовал последующий запрос на Как переписать URL-адреса, на которые ссылается код Javascript?

ОБНОВЛЕНИЕ 2: Я отказался от идеи букмарклетов и Greasemonkey, потому что они требуют установки / модификации на стороне клиента. Нам нужно сделать процесс как можно более плавным, иначе многие из них будут отключены процессом и не позволят нам сделать это.

3 ответа

Решение

После долгой игры с этим я сделал следующее:

  1. Перепишите файлы HTML и JS на лету. Все остальные ресурсы размещены на оригинальном веб-сайте.
  2. Для файлов HTML введите <base> тег, указывающий на перенаправляемый сайт. Это заставит браузер автоматически перенаправлять относительные ссылки (в HTML-файле, CSS-файлах и даже Flash!) На исходный веб-сайт.
  3. Для файлов JS примените регулярное выражение для исправления определенных разделов кода, которые указывают на записанный URL-адрес. Я загружаю перенаправленную страницу в браузере, ищу неработающие ссылки и выясняю, какой раздел JS нужно исправить, чтобы исправить проблему.

Это звучит намного сложнее, чем есть на самом деле. В среднем исправление каждой страницы занимает менее 5 минут работы.

Большое открытие было <base> тег! Это исправило подавляющее большинство ссылок от моего имени.

Я бы предложил создать прокси с помощью обработчика HTTP.

в ProcessRequest ты можешь сделать HttpWebRequest чтобы получить контент с другой стороны, измените его и верните настроенный HTML-код в браузер. Вы можете переписать URL-адреса внутри, чтобы разрешить загрузку изображений и т. Д. Из исходного источника.

public void ProcessRequest(HttpContext context)
{
  // get the content using HttpWebRequest
  string html = ...

  // alter it

  // write back the adjusted html
  context.Response.Write(html);
}

Если вы демонстрируете на клиентской стороне и хотите просто быстро его взломать, вы можете выполнить его с помощью некоторого jQuery. Я нажал кнопку после логотипа SO просто для демонстрации. Вы могли бы напечатать это в своей консоли:

$('head').append('<script src="https://www.paypalobjects.com/js/external/dg.js" type="text/javascript"></script>')
$('#hlogo').append('<form action="https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay" target="PPDGFrame" class="standard"><label for="buy">Buy Now:</label><input type="image" id="submitBtn" value="Pay with PayPal" src="https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif"><input id="type" type="hidden" name="expType" value="light"><input id="paykey" type="hidden" name="paykey" value="insert_pay_key">')
var embeddedPPFlow = new PAYPAL.apps.DGFlow({trigger: 'submitBtn'});

введите описание изображения здесь

Теперь я не уверен, что я сделал что-то не так или нет, потому что я получил эту ошибку в последней части:

Expected 'none' or URL but found 'alpha('.  Error in parsing value for 'filter'.  Declaration dropped.

Но, во всяком случае, если вы демо-версию, вы могли бы просто сделать это, возможно, как план Б. (Вы могли бы также написать для этого скрипт пользователя, чтобы вам не приходилось открывать консоль, я полагаю?)

Другие вопросы по тегам