Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从AngularJS站点安全地连接到web api_Php_Web Services_Security_Rest_Web - Fatal编程技术网

Php 如何从AngularJS站点安全地连接到web api

Php 如何从AngularJS站点安全地连接到web api,php,web-services,security,rest,web,Php,Web Services,Security,Rest,Web,由于对web开发相对较新,至少使用客户端技术,如AngularJS框架,我需要解决一些查询,然后才能开始我的最新项目 我正在使用AngularJS编写一个应用程序,它读取/写入/更新数据库中的数据。由于javascript是客户端,我选择编写一个PHP REST API来执行数据库查询,从而生成一个安全的用户名和密码以及一个数据库层 我的问题是,考虑到我的RESTAPI,我将使用javascript(客户端)中的AJAX调用方法。如何阻止其他站点编写脚本来调用RESTAPI?在javascrip

由于对web开发相对较新,至少使用客户端技术,如AngularJS框架,我需要解决一些查询,然后才能开始我的最新项目

我正在使用AngularJS编写一个应用程序,它读取/写入/更新数据库中的数据。由于javascript是客户端,我选择编写一个PHP REST API来执行数据库查询,从而生成一个安全的用户名和密码以及一个数据库层

我的问题是,考虑到我的RESTAPI,我将使用javascript(客户端)中的AJAX调用方法。如何阻止其他站点编写脚本来调用RESTAPI?在javascript代码中放置身份验证令牌不是很安全,有人可以直接复制它

RESTAPI是解决此问题的最佳方法吗?我不反对学习新的技术或实践,因此,非常感谢您对更好的设计模式或实现方法的任何想法。不幸的是,由于我在这一领域的知识有限,我在谷歌搜索中一直没有收获,因为我对应该搜索的条件没有信心


非常感谢。

因为您的Angular应用程序位于浏览器中,所以您的REST API需要从任意访问者的浏览器中公开访问。因此,出于必要,您有了一个公共API。你不能限制它;访问者可以看到数据,也可以看不到

从本质上讲,这与传统的网页并没有太大区别。在服务器端生成的页面中,您将数据打包为HTML输出,并将其发送给任何提出请求的人。在REST-API/Angular应用程序中,您可以将打包为JSON的数据发送给任何提出请求的人。无论哪种方式,数据都是同样公开的,尽管RESTAPI可能比删除HTML更容易“滥用”。如果您希望避免有人彻底吸干您的数据库,那么考虑采用一些用户行为跟踪和限制可能会很有用;这同样适用于基于JSON的RESTAPI,就像它适用于常规网页一样

如果您也以这种方式公开读写API,那么您当然很容易被滥用

使API非公开的唯一方法是要求密码身份验证。如果站点的用户必须登录,则可以将API限制为任何具有有效会话的用户。如果任何人都可以简单地在你的站点上注册一个帐户,那么这对授予计划没有多大帮助,但是它需要更多的考虑,并且比完全开放的API提供稍微更多的可管理性


当然,只有管理员的API必须以这种方式进行保护,需要一个只有您才有资格访问的帐户

谢谢你的回复。这是我的想法/担忧,RESTAPI根目录为所有类型的连接留下了广阔的空间,您几乎无法有效地限制发起人。这是否意味着有更好的方法?我假设一定有一种方法可以安全地从客户端应用程序执行服务器端代码?但是,请再次强调:无论如何,您都要在公共网站上公开这些数据。RESTAPI和HTML页面之间的技术区别是微不足道的。不要公开你不想公开的东西。我可以编写一个程序,对所有HTML页面进行爬网,并从中提取所有信息。最后,它给出了与JSON API相同的结果。这样做需要做更多的工作,但不是很重要。数据将显示在一个公开的网站上,但是,用户必须登录才能查看此页面。我主要担心的是,用户可能会登录,了解通过API访问数据的方法,然后从自己的站点访问数据。登录仅为用户创建,用户无法自行创建,但如果使用用户的凭据打开新网站,最初可能很难捕获。与传统网站仍然没有区别。什么是用户身份验证?它是一个附加的HTTP头(通常为:
Cookie
)。没别的了。任何人都可以在任何时间从任何地方发出带有该标头的HTTP请求。只要它们发送cookie的有效值,它们就“在”。您可以为REST API利用完全相同的特性。@deceze我正在开发一个Angular 5 web应用程序,它是关于在线考试并立即告诉结果的。尝试测试后,客户端将向服务器请求正确答案列表,然后将用户的答案与从firebase server收到的正确答案进行比较。如果注册用户可以访问firebase server上存储的正确答案API,他将能够知道正确答案,这将是一个失败。你能告诉我在这种情况下我能做什么吗。有什么建议吗?