假设我使用某种API,我的文件 server.php 处理与API服务的连接。在我的客户端,我使用这样的AJAX调用:
$http({
url : 'server/server.php',
method : 'GET',
data : { getContent : true }
});
在我的server.php中,我这样处理:
if(isset($_GET['getContent'])){
$content = get_content();
}
function get_content(){...}
我只是想知道是什么阻止任何人使用相同的getContent参数发送AJAX调用并获取我的所有数据?我如何保护它并确保只有来自我的应用程序的调用才能获得相关数据?
谢谢你!答案 0 :(得分:5)
我猜你担心CSRF攻击。在此处详细了解:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
保护您的请求的最常用选项之一是: - 生成令牌并将其与会话请求一起发送。您的WebServer可以将此标记标识为源自特定会话的特定客户端
答案 1 :(得分:2)
我只是想知道是什么阻止任何人使用相同的getContent参数发送AJAX调用并获取我的所有数据?
无。此网址是公开的,因此任何人都可以向其发出请求。
如何保护它并确保只有来自我的应用程序的调用才能获得相关数据?
您可以传递在服务器端验证的其他数据(例如,某些散列值)。
$http({
url : 'server/server.php',
method : 'GET',
data : { getContent : true, hash : '0800fc577294c34e0b28ad2839435945' }
});
和
if(isset($_GET['getContent']))
{
if(isset($_GET['hash']) && validateHash($_GET['hash']))
{
$content = get_content();
}
}
function get_content(){...}
答案 2 :(得分:2)
我只是想知道是什么阻止任何人使用相同的getContent参数发送AJAX调用并获取我的所有数据?
与保护任何其他请求中的数据的方式相同(例如,使用用户身份验证)。就服务器而言,关于HTTP,Ajax并没有什么特别之处。
如何保护它并确保只有来自我的应用程序的调用才能获得相关数据?
你不能。用户可以随时检查浏览器询问服务器的内容并进行复制。
通常,人们会对用户进行身份验证,而不是应用程序。