我需要发布数据以在不受我控制的外部网站上形成。我正在构建一个工具,允许用户在一个地方填写数据,然后发布到多个存放相似表单的外部网站,而不是单独填写每个表单。将数据发布到外部表格
基本上,工作流程是这样的:
- 用户填写全面形成我的网页
- 这个数据被存储到我的分贝
- 用户被重定向到感谢页面,链接到外部形式
- 点击任何链接时,新窗口应打开窗体部分字段与我的表格匹配的字段
这最后一步是骇人听闻的。我依靠外部表单进行正确编码,所以当我发布数据不足时(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字段)还是我在更基本的层面上丢失了一些东西?我不能发送链接到这些表格,因为这些信息可能是敏感的,所以我很感兴趣,如果这个基本的想法应该工作,理想的情况下,如果一切正常,或者它有一些根本的缺陷。
我知道会有一些边缘案例,我只对原则感兴趣。
感谢事先配发
他们可以使用某种CSRF保护 –
您要么建立一个浏览器插件,要么你将不得不面对的事实是你无能为力。如果他们不接受来自其他域的帖子请求,则由于相同的原始策略使您几乎不可能与另一个页面进行交互,所以您运气不佳。 – epascarello
使用浏览器插件会使这个问题变得轻而易举,但是我仅限于PHP,JS和类似的。 – user2219715