0

我需要将数据发布到不受我控制的外部网站上。我正在构建工具以允许用户在一个地方填写数据,然后发布到包含类似表单的多个外部站点,而不是单独填写每个表单。

基本上,工作流程是这样的:

  1. 用户在我的页面上填写综合表格
  2. 这些数据被存储到我的数据库中
  3. 用户被重定向到感谢页面,并带有指向外部表单的链接
  4. 单击任何链接时,应打开新窗口,其中部分字段包含我的表单中的匹配字段

最后一步是骇人听闻的。我依靠外部表单来正确编码,所以当我在数据不足的情况下发布到它(验证码和缺少其他必填字段)时,我指望该页面重新加载已发布的数据并合并到表单中,和标记有缺失数据的字段。这样,用户可以只填写那些丢失的数据(理想情况下只有验证码),而不必再花一个小时重新输入相同的数据。

这意味着做 curl post 不会削减它,所以我采用了以下 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 引用字段),或者我错过了更基本的东西?我无法发送这些表格的链接,因为该信息可能很敏感,所以我很感兴趣这个基本想法是否应该有效,在理想情况下,如果一切都合适,或者它是否有一些基本缺陷。

我知道会有很多极端情况,我只对原则感兴趣。

感谢提前分配

4

1 回答 1

0

“但是,我没有向我显示部分填写但缺少某些字段的表单,我只是得到空白表单”
好吧,服务器端部分仍然需要显示部分填写的表单,并且如果那个“后接收者”的编码器没有编码该功能然后,就像所有与计算机相关的东西一样,进入该代码的通用规则是正确的:“如果你没有告诉它做某事,它就不会做。”

这以及诸如 HTTP Referer 字段之类的东西以及人们用来保护他们免受外部表单发布的其他技巧。

如果您的用户通过您控制的代理服务器导航到外部站点,您就可以摆脱它......提示。您可以在 php 中编写一个代码,解析 html/ecmascript(在 php 中)(或尝试对其进行正则表达式),在源中设置字段并将修改后的源发送给用户。这有点像“中间人”(攻击)。

使用此解决方案时,请记住,这最终会使您受到黑客的注意:因为您拥有的用户越多,破解您的系统并获得所有这些美味的用户数据的“奖池”就越大!同样,如果“他们”设法接管了该代理服务器(您的用户相信您不会滥用该代理服务器),他们就可以访问您所有用户的无数用户帐户!

祝你好运!

于 2013-03-28T13:04:50.623 回答