Передача данных с одного сайта на другой - PullRequest
1 голос
/ 11 мая 2011

У меня есть два сайта A и B, оба написаны на ASP.NET MVC 3. На сайте A есть форма, которую необходимо отправить на сайт B методом POST.У пользователя есть возможность опубликовать его напрямую или после шифрования значений.

Когда я отправляю форму без шифрования, это просто form.submit (), и я могу получить значения на веб-сайте B, используя объект FormCollection.Но когда пользователь выбирает «Отправить после шифрования», я перенаправляю на другое действие на самом веб-сайте А, где происходит шифрование, а затем эти зашифрованные данные помещаются в скрытое текстовое поле в соответствующем представлении, а затем автоматически передаются при загрузке страницы с помощью jQuery на веб-сайт B. Но теперьЯ не могу получить какие-либо значения в объекте FormCollection на веб-сайте B.

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

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Сомнительно, что это от защиты XSS - в этом случае вы увидите исключение. Загрузите Fiddler и убедитесь, что вы видите эти данные в элементе внутри формы , который публикуется на веб-сайте b. если оно есть в отправляемой форме - оно должно быть доступно.

1 голос
/ 11 мая 2011

Есть ли причина, по которой вы не используете HTTPS и не отправляете форму непосредственно на сайт B?

<form action="https://siteb/someaction" method="POST">
    <input type="text" name="key1" value="value1" />
    <input type="text" name="key2" value="value2" />
    <input type="text" name="key3" value="value3" />
    <input type="submit" value="Go ahead" />
</form>

Если есть какая-либо причина в том случае, если вы шифруете значения в один скрытый ввод и отправляете форму, содержащую это скрытое поле, с использованием JavaScript, на сайт будет отправлено только значение скрытого поля.B. Так, например, если бы у вас была следующая форма:

<form action="http://siteb/someaction" method="POST">
    <input type="hidden" name="encrypted" value="some encrypted value" />
</form>

на сайте B, вы могли бы получить зашифрованное значение следующим образом (не используйте FormCollection, это несколько уродливо по сравнению с моделями представления):

[HttpPost]
public ActionResult SomeAction(string encrypted)
{
    // TODO: decrypt the encrypted value here to get the orginal string
    ...
}

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

[HttpPost]
public ActionResult SomeAction(SomeViewModel model)
{
    // Directly use the model with all the fields in it.
    // The custom model binder will take care of the creating it
    // from the encrypted request string
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...