我正在为我正在开发的web应用程序创建一个自定义电子商务模块。我们让用户有机会为他们的网站创建一个模块,该模块将与我们一起托管到一个域中,例如:http://example.com
。
该模块在用户的帐户管理面板中有一个Javascript接口。为了访问管理面板,他们必须使用自己的帐户登录我们的web应用程序。
他们可以添加产品、更改电子商务设置(如货币)等。当添加产品或修改内容时,会调用用户域中的URL,调度器会调用PHP函数(添加产品、删除产品等)并修改他们的数据库,但如果有人知道处理过的URL,可以使用REST API客户端发送信息,并且它应该工作(例如,向移除产品操作发送产品ID)。我们希望防止这种情况发生,因为有人可能会删除客户的产品或修改一些电子商务设置。
当调用API URL时,我们考虑使用存储在PHP SESSION
中的令牌,将令牌返回给AJAX调用,然后使用给定的令牌对请求的函数进行另一次AJAX调用。调用函数时,会比较两个标记,如果它们相同,则允许进行更改。否则,它们会被拒绝,但我们不知道这是否是一种"良好的安全性",可以防止从外部访问API。因为你可以"找到"知道你必须调用URL才能获得访问令牌的方法,然后用给定的令牌进行另一次调用并执行销毁。
提前谢谢。任何信息或建议都将不胜感激。
谨致问候。
您可以尝试以下操作:
- 用户必须登录才能操作数据库(例如,添加/删除记录)
- 当所述用户登录时,将令牌(随机化值)存储在会话变量
$_SESSION['token'] = md5( time() ); // for example
中 - 然后添加一个隐藏的表单输入(
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
),以便使用处理DB操作的表单进行处理 - 添加
$_SESSION['token'] == $_POST['token']
必须满足的条件,以便所需操作成功。当然,首先要确认$_SESSION['token']
是否存在。如果没有,他们正在从外部访问您的系统
这是一种方法。