从带有查询表格的静态网站(即Jekyll网站)防止跨站点请求伪造JSONP请求

时间:2013-10-21 09:38:26

标签: javascript php security jsonp csrf

我需要处理使用Jekyll构建的静态网站的查询表单。

查询表单将JSONP请求(GET)提交给处理请求的另一个域上的PHP应用程序。

是否可以防止CSRF,因为表格是静态的?

我注意到PHP Slim Framework的CSRF中间件仅保护POST,PUT和amp; DELETE方法,而不是GET。

如果我在静态站点中有一个脚本,那么在每个页面上构建表单加载服务器请求的数据(cookie值,csrf标记以及字段值等)是否可行?

感谢您的时间

2 个答案:

答案 0 :(得分:1)

没有

针对CSRF的防御取决于发送请求的页面以及发送请求的服务器同意用户的唯一标识符。

由于表单是静态的,因此您无法在表单中放置该唯一标识符。

  

如果我在静态站点中有一个脚本,那么在每个页面上构建表单加载服务器请求的数据(cookie值,csrf标记以及字段值等)是否可行?

只有它是服务器端脚本(因此表单不是静态的),否则任何站点都可以包含它来获取令牌。


  

我注意到PHP Slim Framework的CSRF中间件仅保护POST,PUT和amp;删除方法,而不是GET。

这是因为GET requests shouldn't be doing anything in the first place,所以(除非你滥用它们),不需要对它们应用CSRF保护。

  

特别是,已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便让用户知道正在请求可能不安全的操作。

答案 1 :(得分:1)

无需保护CSRF,因为表单在当前用户的上下文中没有获得任何内容 - 如果攻击者想要在您的网站上提交表单,则无需“跨站点” ......他们只是提交它。

听起来好像是在CAPTCHA之后阻止机器人提交表单(如果那是你真正想要的那样?)。