对于Web开发来说相对较新,至少使用AngularJS框架等客户端技术,我需要在启动最新项目之前解决一些问题。
我正在使用AngularJS编写应用程序,该应用程序读取/写入/更新数据库中的数据。由于javascript是客户端,我选择编写PHP REST API来进行数据库查询,从而产生安全的用户名和密码以及单个数据库层。
我的问题是,鉴于我的REST API,我将使用javascript(客户端)的AJAX来调用方法。如何阻止其他站点编写脚本以调用REST API?在javascript代码中放置身份验证令牌并不十分安全,有人可以复制它。
REST API是解决此问题的最佳方法吗?我并不反对学习新技术或实践,所以,对于更好的设计模式或实施方法的任何想法都非常感谢。不幸的是,由于我在这方面的领域知识有限,我在谷歌搜索中一直没有用,因为我对我应该搜索的条款没有信心。
非常感谢。
答案 0 :(得分:4)
由于您的Angular应用程序存在于浏览器中,因此您需要从任何随机访问者的浏览器公开访问您的REST API。因此,您必须拥有公共API。你不能限制它;访问者可以查看数据,或者他们不能。
基本上,这与传统网页没有显着差异。在服务器端生成的页面中,您输出打包为HTML的数据并将其提供给任何要求的人。在REST-API / Angular应用程序中,您将打包为JSON的数据提供给任何要求的人。无论哪种方式,数据都是公开的,尽管REST API比抓取HTML更容易“滥用”。如果你想避免有人直接吮吸你所有的数据库,那么考虑使用一些用户行为跟踪和限制可能是有用的;这同样适用于基于JSON的REST API,就像常规网页一样。
如果你也以这种方式公开阅读/ 写 API,那么你当然可以滥用。
使API非公开的唯一方法是要求密码验证。如果您网站的用户必须登录,则可以将API限制为具有有效会话的任何人。如果任何人都可以在您的网站上注册一个帐户,这对资助计划没有多大帮助,但它需要更多的审议,并提供比完全开放的API更多的可管理性。
管理员API当然必须以这种方式受到保护,需要一个只有您拥有凭据的帐户。