2013-03-28 233 views
0

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

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

  1. 用户填写全面形成我的网页
  2. 这个数据被存储到我的分贝
  3. 用户被重定向到感谢页面,链接到外部形式
  4. 点击任何链接时,新窗口应打开窗体部分字段与我的表格匹配的字段

这最后一步是骇人听闻的。我依靠外部表单进行正确编码,所以当我发布数据不足时(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

您要么建立一个浏览器插件,要么你将不得不面对的事实是你无能为力。如果他们不接受来自其他域的帖子请求,则由于相同的原始策略使您几乎不可能与另一个页面进行交互,所以您运气不佳。 – epascarello

+0

使用浏览器插件会使这个问题变得轻而易举,但是我仅限于PHP,JS和类似的。 – user2219715

回答

0

“然而,不是我展示部分填充形式与一些现场失踪,我只是得到空白表单”
那么,服务器端的部分仍需要显示的部分填充的形式,如果那个'post-reciever'的编码员没有将该功能编码到该代码中,然后,就像所有与计算机相关的通用规则都是一样的:“如果你没有告诉它做什么,它就不会这么做。”

这和HTTP Referer字段以及人们用来保护它们免受外部表单提交的其他技巧一样。

如果您的用户通过代理服务器导航到外部网站,您可以控制...提示。你可以在php中编写一个代码,解析html/ecmascript(在php中)(或者尝试将它正则表达),在源代码中设置字段并将修改过的源发送给用户。这是一个'中间人'(攻击)。

当使用这个解决方案时,请记住这最终会让你在黑客的雷达上:因为你拥有的用户越多,“奖品”就越大,它就是破解你的系统并获得所有这些美味的用户 - 数据!同样,如果他们设法接管了代理服务器(您的用户信任您不会滥用),他们可以访问所有用户的无数用户帐户!

祝你好运!

+0

这似乎是我可以尝试的事情,因为我没有想法。我仅限于PHP + JS和相关技术。今天我会尝试做一个粗略的版本,只是作为一个概念证明。 – user2219715

+0

不客气,不要忘记最终接受答案。祝你好运! – GitaarLAB