【问题标题】:How to pre-populate a form from a web app on a different server如何从不同服务器上的 Web 应用程序预填充表单
【发布时间】:2011-08-24 03:06:57
【问题描述】:

我在服务器 A 上有 Web 应用程序 A,它链接到服务器 B 上的 Web 应用程序 B。我正在链接到一个表单,我想用来自 Web 应用程序 A 的数据预填充该表单。所以:

Web App A -- 链接到表单并发送数据以进行预填充--> Web App B

由于它们位于不同的服务器上,我不能只在 Session 中添加一些东西,所以我必须更有创意。我正在考虑几种不同的选择,并且正在寻找最简单的解决方案。有什么建议吗?

以下是我正在考虑的几个选项:

  • 通过查询字符串参数传递链接中的表单数据。这看起来很简单,这样做合法吗?还是出于安全考虑?我将传递大约 8 个参数,最敏感的是电子邮件地址和地址。这一切都将通过 SSL。
  • 同样,我可以将数据作为 POST 参数传递。
  • Web App A writes a cookie, Web App B reads the data from the cookie。 (这似乎比作为 GET 或 POST 参数传递更多的安全问题)
  • 我可以share an object via JNDI to use for prepopulation。然后我想我可以在查询字符串上传递一个唯一 ID,Web App B 可以使用它来获取对象。这似乎是“矫枉过正”,我不确定这将如何工作。
  • 我可以根据唯一 ID 将数据存储在数据库中,将唯一 ID 传递给查询字符串,然后在 Web App B 中从同一个数据库中获取它。同样,这可能是“矫枉过正”。

有什么想法吗?或者有没有我没有列出的更好的解决方案?

【问题讨论】:

    标签: java


    【解决方案1】:

    您应该假设 Web 应用 A 放入重定向中的任何内容在到达 Web 应用 B 之前都可以被读取/窃取/修改/欺骗(除非您在应用 A 和 B 上都使用 SSL)。如果这不是问题,那么将参数放在重定向 URL 上就可以了。

    一种安全的方法是让应用 A 生成唯一 ID(不可猜测且寿命短)并根据该 ID 存储信息。 ID 与请求一起传递给应用 B。然后服务器 B 使用该 ID 以私有安全方式访问来自服务器 A 的数据,例如调用服务器 A 上不可公开访问的 Web 服务。

    【讨论】:

    • 感谢您的回答。他们实际上都在使用 SSL,所以我想正如你所说,这应该不是问题。此外,如果我确实决定使用唯一 ID 建议,我认为这会更容易,因为它们都读/写到一个公共数据库。这将消除对服务器 A 上 Web 服务的需求。
    • @Jason 只要确保传递的 ID 是短暂的(少于 20 秒)并且不可猜测(至少 128 位),否则您可能会遇到这种情况; theregister.co.uk/2007/12/04/canadian_passport_site_breach
    • 非常感谢您的回答!这正是我想要的;这些方法的安全“陷阱”。
    【解决方案2】:

    在我看来,GET 参数是最简单的方法,我不认为有重要的安全隐患。

    【讨论】:

    • 没错,我在想一个带有隐藏字段的表单,通过 javascript 为 POST 提交。
    • 您可以执行 POST 请求,但是您可以使浏览器随请求一起去那里吗?也就是说,不是做ajax请求,而是引起正常 POST请求? POST 也没有修改任何东西,所以它是“错误的形式”。
    • 非常确定。只要我在页面上有一个表单元素,我就可以执行一个“form.submit()”,它应该指示浏览器执行一个 POST 请求。它与用户定期提交表单请求的效果相同。
    • 到你的第二点,这是真的,可能不是很好的形式。我喜欢的是它对用户是不可见的,这意味着没有大的查询字符串。
    • 啊,对了,一个简单的 form.submit() 就可以了 :) 刷新也会导致警告“你确定要重新提交吗”。我真的更喜欢 GET 但你是对的 POST 可以正常工作。
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多