跨服务器表单数据以安全的方式发送

时间:2015-10-08 12:08:05

标签: php forms security post cross-domain

从1个网站的表单向另一个(同一服务器中的2个不同子域)发送一些重要信息。由于接收端位于不同的子域中,我不能让它需要登录(就像我在相同的情况下那样)并且这使得我的接收端非常脆弱,因为它可以很容易地从另一个地方调用这是绕过我的形式的工作(非常糟糕)。

如何让这更安全?我可以发送某种安全令牌以及无法截获的表单(因为我假设$ _POST数组只包含一个安全令牌,它可以如果我错了,请纠正我,或者限制接收端只接受来自某个特定地点(如某个网址或IP)的数据?

这是一个重要的项目,所以我不介意过度使用它的安全性。

2 个答案:

答案 0 :(得分:2)

  

我无法登录

是的,你可以。跨域的单点登录是一个很好的文档记录问题,您甚至不会处理多个域。它是even easier across subdomains

  

我可以发送某种安全令牌以及我的表单

是。生成令牌。将其存储在服务器上。把它放在表格中。提交表格。

  

无法截获

通过SSL提交表单。

(除非你的意思是你希望存储控制浏览器的人拦截它,在这种情况下你运气不好。如果你是通过浏览器发送数据,那么你将它置于浏览器的控制之下如果您不信任它们,那么您就无法信任这些数据。)

  

你能告诉我一个很好的方法来限制targetForm.php只能从a.domain.com/form.php或它的ip上接收信息吗?

您正在寻找对CSRF的防御。您需要在子域中实施会话(您可以执行此操作,请参阅上面有关Cookie的说明),然后使用synchroniser token(您存储在表单和会话中,然后在{ {1}})。

答案 1 :(得分:0)

我采取一种简单的方法:

  1. 表单位于子域A上,例如a.domain.com/form.php
  2. 表单将数据提交到同一个子域甚至脚本(为什么不提交),a.domain.com / form.php
  3. form.php使用cURL向b.domain.com/targetForm.php发送POST请求
  4. b.domain.com/targetForm.php仅接受来自b.domain.com的IP或类似内容的请求
  5. 这样你仍然可以要求用户登录a.domain.com以提交表单,当一切正常时,将数据推送到b.domain.com/targetForm.php,你可以d make仅接受来自a.domain.com的请求。