我需要在不受我控制的外部网站上发布数据。我正在构建工具,允许用户在一个地方填充数据,然后发布到容纳类似表单的多个外部网站,而不是单独填写每个表单。
基本上,工作流程如下:
这最后一步是hackish。我依赖外部表单进行正确编码,所以当我发布时没有足够的数据(验证码和其他一些必需的字段缺失),我指望重新加载发布的数据并将其合并到表单中,以及标记缺失数据的字段。这样,用户只能填充那些丢失的数据(理想情况下只能填充验证码),而不必再花一小时再次重新输入相同的数据。
这意味着做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 Referer字段),还是我在更基本的层面上遗漏了什么?我不能发送这些表格的链接,因为这些信息可能是敏感的,所以我很感兴趣,如果这个基本的想法应该有效,理想情况下,如果一切正常,或者它有一些根本的缺陷。
我知道会有很多边缘案例,我只对原则感兴趣。
提前感谢分配
答案 0 :(得分:0)
'然而,我没有向我展示部分填充的表格,而是缺少某些字段,我只是得到空白表格 那么,服务器端部分仍然需要显示部分填充的表单,如果'post-reciever'的编码器没有将该功能编码到该代码中,那么,就像所有与计算机相关的通用规则都适用:“如果你做了不要告诉它做某事,它不会这样做。“
这就是HTTP Referer字段和人们用来保护他们免受外部表单帖子的其他伎俩。
如果您的用户通过您控制的代理服务器导航到外部网站,您可以侥幸逃脱...提示。您可以在php中编写一个代码,解析html / ecmascript(在php中)(或尝试正则表达它),设置源中的字段并将修改后的源发送给用户。这是一种“中间人”(攻击)。
使用此解决方案时,请记住,这最终会让您进入黑客的雷达:因为您拥有的用户越多,“奖池”就越破解您的系统并获得所有这些美味的用户数据!同样,如果'他们'设法接管代理服务器(您的用户信任您不会滥用),他们就可以访问所有用户的无数用户帐户!
祝你好运!