如果我添加了针对用户的故意不当行为的保护措施(轻描淡写),如果用户可能遭受的伤害与我的代码无关,是否过度设计?
为了澄清,我将公开一个简单的JSON RESTful服务,如下所示:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
该服务本身并不旨在通过浏览器使用,而只能从由用户控制的第三方应用程序(例如电话应用程序,桌面应用程序等)中使用。同样,服务本身应该是无状态的(即无会话的)。
身份验证通过SSL上的基本身份验证完成。
我说的是这样一种可能的“有害”行为:
用户在浏览器中输入GET网址(没有理由,但是...)。浏览器要求基本身份验证,对其进行处理,并为当前浏览会话存储身份验证。用户无需关闭浏览器即可访问恶意网站,该网站具有恶意CSRF / XSRF javascript,可对我们的服务进行POST。
上述情况极不可能发生,并且我知道从业务角度来看,我不必担心太多。但是为了改善这种情况,您是否认为如果JSON POST数据中也需要用户名/密码,这会有所帮助吗?
还是应该完全放弃基本身份验证,放弃GET,只使用其中包含授权信息的POST / PUT?由于通过GET检索信息也是敏感的。
另一方面,使用自定义标头是否考虑过纯REST实现?我可以删除基本身份验证,并使用自定义标头。这样,至少可以避免来自浏览器的CSRF攻击,并且使用该服务的应用程序将在自定义heather中设置用户名/密码。这种方法的缺点是,现在无法从浏览器使用该服务。