2015-07-02 47 views
1

我需要在发布和放置请求时保护我的API for CSRF。为了做到这一点,我认为移动设备(例如iOS)需要向API服务器(node.js)发送令牌。该令牌必须经过加密并包含将在服务器端进行解密的JSON数据。使用IOS上的密钥对json数据进行加密并使用节点j对其进行解密

要解密数据,移动设备使用服务器知道的相同密钥。

例如:{_csrf: 123456789}将从通过移动设备发送的令牌中解密,如果匹配,则由API检查。

  1. 这是正确的方法吗?如果不是什么是正确的方式?

  2. 如何在iOS上加密Jon数据并在node.js上对其解密? (JWT令牌没有库iOS设备)

你能为我提供一个示例代码进行加密在iOS等数据解密上的node.js?

回答

0

只需使用https,即可加密所有内容,即使是任何查询字符串。

内容使用随机对称密钥进行加密,该密钥使用证书中的非对称密钥加密。此外,对称密钥的寿命很短。另外你不必实现和加密例程。

另外请注意,iOS9默认情况下要求https用于所有连接,任何http连接都需要在plist中列出白名单。

如果您进行自己的加密,您将立即遇到在设备和服务器之间共享加密密钥的问题。这不是一个容易解决的问题。

+0

这不会保护CSRF。这根本不安全。使用CSRF,浏览器本身就是问题所在。你仍然必须防止CSRF。 –

+0

由于没有浏览器,因此没有潜在的CSRF攻击。 – zaph

+0

“我需要为CSRF保护我的API,并发布请求。” “只需使用https ...”是的,这是不安全的部分。 HTTPS不能防止CSRF。对不起,如果我有点强大。 @zaph –

0

从浏览器页面访问API时,为了防止CSRF,您可以在HTTP标头中发送令牌,例如X-CSRF-Token或使用cookie。

例如,让您的服务器使用X-CSRF-Token标头在HTTP响应中发送CSRF令牌。您可以让您的页面以POST或PUT中的JSON形式发回。或者让你的页面从cookie中读取它并将其放入JSON中。

(HTTPS 从浏览器防止CSRF,由于在相同浏览器中运行任何其他网站上的任何脚本可以张贴到您的HTTPS服务器自由。你的页面需要有一个令牌,没有其他页面在同一浏览器中可以访问。)

相关问题