2013-03-28 5 views
0

Мне нужно разместить данные для создания на внешнем сайте, который не под моим контролем. Я создаю инструмент, позволяющий пользователю заполнять данные на одном месте, а затем отправлять на несколько внешних сайтов, на которых размещаются похожие формы, а не заполнять каждую форму отдельно.Публикация данных во внешнюю форму

В принципе, рабочий процесс выглядит следующим образом:

  1. Пользователь заполняет комплексную форму на моей странице
  2. Эти данные получает хранится в моей БД
  3. Пользователь перенаправляется спасибо вам страницу со ссылками на внешние формы
  4. Если какие-либо из ссылки щелкает, новое окно должно открываться формой частично полями с согласующими полями из моей формы

Этот последний шаг хакерский. Я полагаюсь на внешнюю форму, чтобы быть правильно закодированной, поэтому, когда я делаю сообщение с ней с недостаточными данными (captcha и несколько других обязательных полей отсутствует), я рассчитываю, что эта страница будет перезагружена с размещенными данными, включенными в форму, и поля с отсутствующими данными. Таким образом, пользователь может заполнить только те недостающие данные (в идеале, только captcha), и не придется тратить еще один час на повторное включение одних и тех же данных.

Это означает, что выполнение завитушки не сокращает его, поэтому я пошел со следующим JS-подходом.

function repostForm(id, url) {  

var map = fieldMap[id]; // this is map between my field names and external form field names 

// construct form 
var form = document.createElement('form'); 
form.setAttribute('method', 'post'); 
form.setAttribute('action', url); 
form.setAttribute('target', '_blank'); 

for (i=0; i<map.length; i++) { 
    var input = document.createElement('input'); 
    input.setAttribute('name', map[i].external); 
    input.setAttribute('value', submissionData[map[i].local]); 
    form.appendChild(input); 
} 

document.body.appendChild(form); 
form.submit(); 

}

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

Я пробовал это с двумя разными формами, и они оба действуют таким образом.

Неужели мне не повезло, так что у этих форм есть дополнительные проверки безопасности (например, проверка поля HTTP Referer), или я что-то пропустил на более базовом уровне? Я не могу отправить ссылку на эти формы, так как эта информация может быть чувствительной, поэтому мне интересно, если эта основная идея должна работать в идеальном случае, если все подходит должным образом или имеет фундаментальный недостаток.

Я знаю, что будут выделены граничные шкафы, и меня интересует только принцип.

Благодаря отчислять заранее

+0

Они могут использовать какую-либо защиту CSRF. –

+0

Вы либо создаете плагин для браузера, либо вам придется столкнуться с фактом, что вы ничего не можете сделать. Если они не принимают почтовые запросы из другого домена, вам не повезло из-за той же политики происхождения, что практически невозможно, чтобы JavaScript мог взаимодействовать с другой страницей. – epascarello

+0

Наличие плагина для браузера сделает эту проблему легкой, но я ограничена PHP, JS и так же. – user2219715

ответ

0

«Тем не менее, вместо того чтобы показывать мне частично заполненные формы с некоторым полем отсутствует, я просто получить пустую форму»
Ну, серверная часть все еще необходимо, чтобы отобразить частично заполненную форму, и если кодер этого «пост-приемника» не кодировал эту функциональность в этот код, тогда, как и все связанные с компьютером, универсальное правило имеет значение true: «Если вы не сказали ему что-то делать, он этого не сделает».

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

Вы можете уйти с ним, если ваши пользователи перейдут на внешние сайты с помощью прокси-сервера, которым вы управляете ... подсказка. Вы можете закодировать один в php, проанализировать html/ecmascript (в php) (или попробовать его регулярное выражение), установить поля в источнике и отправить измененный источник пользователю. Это своего рода «человек посередине» (атака).

При использовании этого решения, пожалуйста, имейте в виду, что это в конечном итоге приведет вас к радарам хакера: поскольку чем больше у вас пользователей, тем больше «призовой фонд» взломает вашу систему и получает все эти вкусные пользовательские настройки, данные! Точно так же, если «им» удастся захватить этот прокси-сервер (которым доверяют ваши пользователи, вы не будете злоупотреблять), они получают доступ к бесчисленным учетным записям пользователей всех ваших пользователей!

Удачи вам!

+0

Кажется, что-то я мог попробовать, так как у меня нет идей. Я ограничен PHP + JS и сопутствующими технологиями. Сегодня я попытаюсь сделать грубую версию, как доказательство концепции. – user2219715

+0

Добро пожаловать, не забудьте в конце концов принять ответ. Удачи! – GitaarLAB

Смежные вопросы