【发布时间】:2014-02-21 19:07:48
【问题描述】:
我工作的公司有一个表单,可以通过一行 Javascript 将其添加到任何网站。例如:
<script type="text/javascript" src="//ourserver.com/form.js?id=12345" />
在我们的服务器端,这由 mod_rewrite 获取并发送到 PHP 文件,该文件生成表单代码(基于 id)并使用 HTML 代码执行 document.write,并包含要处理的 jQuery Ajax 代码表单提交。
当然,浏览器和服务器并不是跨域 Ajax 的忠实拥护者,但我们通过添加标头使其工作:
header('access-control-allow-origin: *');
到我们服务器上的表单处理脚本 (PHP)。但是,从我一直在阅读的内容来看,这(以及一般的跨域发布)可能会引发很多 XSS / CSRF 漏洞利用问题。
所以,我的问题是,我们应该如何设置 javascript 和 PHP / 服务器来帮助防止这些漏洞,同时仍然允许将 javascript 放在任何域上?
我们不能将allow-origin标头限制到特定域,我尝试在生成表单时设置会话令牌,然后在提交表单时检查它,但是由于表单的实现方式,会话不会继续。
【问题讨论】:
-
header是否只添加到处理AJAX表单提交的页面?
-
是的,“access-control-allow-origin”标头仅在处理来自 AJAX 表单提交的 POST 的 process.php 文件中。
-
表单提交后 AJAX 处理程序返回哪些数据(如果有)?
-
它是 JSON,它要么是 success:'true',要么是 err:'An error message'(例如未输入必填字段,或处理数据时出错)。没有返回用户输入的数据。