Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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
Javascript API AJAX over PHP-创建对API的安全访问_Javascript_Php_Ajax_Api - Fatal编程技术网

Javascript API AJAX over PHP-创建对API的安全访问

Javascript API AJAX over PHP-创建对API的安全访问,javascript,php,ajax,api,Javascript,Php,Ajax,Api,我正在为正在开发的web应用程序创建一个自定义电子商务模块。我们让用户有机会为他们的网站创建一个模块,该模块将与我们一起托管到一个域中,例如:http://example.com 该模块在用户的帐户管理面板中有一个Javascript接口。为了访问管理面板,他们必须使用他们的帐户登录到我们的web应用程序 他们可以添加产品、更改电子商务设置(如货币)等。当添加产品或修改某些内容时,会向用户域中调用URL,调度器会调用PHP函数(添加产品、删除产品等)并修改其数据库,但如果有人知道处理过的URL,

我正在为正在开发的web应用程序创建一个自定义电子商务模块。我们让用户有机会为他们的网站创建一个模块,该模块将与我们一起托管到一个域中,例如:
http://example.com

该模块在用户的帐户管理面板中有一个Javascript接口。为了访问管理面板,他们必须使用他们的帐户登录到我们的web应用程序

他们可以添加产品、更改电子商务设置(如货币)等。当添加产品或修改某些内容时,会向用户域中调用URL,调度器会调用PHP函数(添加产品、删除产品等)并修改其数据库,但如果有人知道处理过的URL,可以使用REST API客户端发送信息,并且它应该可以正常工作(例如,将产品ID发送到“删除产品”操作)。我们希望防止这种情况发生,因为有人可以删除客户端产品或修改某些电子商务设置

我们考虑在调用API URL时使用存储在PHP
会话中的令牌,将令牌返回到AJAX调用,然后使用给定的令牌对请求的函数执行另一个AJAX调用。调用函数时,比较两个标记,如果它们相同,则允许更改。否则,它们将被拒绝,但我们不知道这是否是防止从外部访问API的“良好安全性”。因为您可以“找到”知道您必须调用URL以获取访问令牌的方法,然后使用给定令牌进行另一次调用并执行销毁

提前谢谢。如有任何信息或建议,将不胜感激


问候。

您可以尝试以下方法:

  • 用户必须登录才能操作数据库(例如添加/删除记录)
  • 当所述用户登录时,将令牌(随机值)存储在会话变量
    $\u session['token']=md5(time());//例如

  • 然后添加一个隐藏的表单输入(
    阅读有关使用的更多信息。以及您已经在使用唯一会话令牌进行的操作。是的,这是第一个想法。问题是,数据库操作是通过AJAX调用进行的,使用jQuery框架,我们的表单实现到jQuery对话框中,因此当您添加产品时,它会在执行时加载,而网页不会重新加载ed,只有API和令牌检索到的对话框信息应该为下一次API调用再次创建,以防止再次使用相同的令牌。因此,我们有点担心,在函数成功完成时检索新令牌是否是一种好的做法。您仍然可以传递会话和表单变量(令牌)通过AJAX。然后,一旦完成,您可以在下次需要时重新生成这些令牌。例如,在每次页面加载时,您可以重新生成令牌。然后,只要用户驻留在一个页面上,您就可以继续重用令牌,直到用户跳转到另一个页面。因此不会有问题,因为令牌将被存储在用户的会话中,如果您通过REST客户端尝试相同的令牌,它应该会失败,因为当您调用该功能时,会话中没有生成令牌,因为您没有通过web应用进行访问,对吗?生成的令牌完全取决于从站点内成功登录开始。初始tok一旦用户成功登录,en生成将在您的用户登录脚本中完成。然后在您希望重新生成令牌的任何时候(如果有)您必须确保用户已登录并且令牌已设置。因此,如果用户试图通过外部REST客户端访问您的服务,则不会登录,并且不会设置任何
    $\u会话['token']
    开始,从而导致
    if($\u会话['token']=$\u POST['token'])
    失败。好的,谢谢你所做的一切:)我对安全性很陌生。