假设我使用某种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调用并获取我所有的数据?我如何才能确保它的安全,并确保只有来自我的应用程序的调用才能获取相关的数据?
谢谢你!
4条答案
按热度按时间pb3skfrl1#
我猜你很担心CSRF攻击。在这里阅读更多信息:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
保护您的请求的最常用选项之一是:-生成令牌并将其与会话请求一起发送。此令牌可以由您的Web服务器识别为来自特定会话的特定客户端
hjqgdpho2#
2022更新
所以,我将提供一个基本的演练和一个完整的模型。
记住,如果
$_SESSION
都来自同一个域,那么即使在AJAX处理程序中,$_SESSION
也会被保留。使用
$_POST
$_POST
而不是$_GET
,因为你担心安全性。如果不是,那么这可能并不重要。*字符串
确保
$_SERVER['HTTP_REFERER']
来自您自己的站点型
如果你不确定这应该是什么,在你自己的服务器上运行一个测试,看看这应该是什么:
型
使用token
这是最难的部分,但不是太难。
1.创建令牌
1.在
$_SESSION
中设置令牌1.将令牌放在AJAX头中
$_SESSION
令牌确认AJAX头令牌send_from_me.PHP
的字符串
apache_responder.php
型
让我们把所有这些放到一个工作示例中
sending_from.php
型
ajaxcheck.inc.php
型
apache_responder.php
型
68bkxrlz3#
我只是想知道是什么阻止任何一个发送AJAX调用相同的getContent参数,并获得我的所有数据?
没有。这个URL是公开的,因此任何人都可以向它发出请求。
我怎样才能保护它,并确保只有从我的应用程序调用将获得相关的数据回来?
您可以传递在服务器端验证的其他数据(例如,一些散列值)。
字符串
和
型
toe950274#
我只是想知道是什么阻止任何一个发送AJAX调用相同的getContent参数,并获得我的所有数据?
就像你在任何其他请求中保护数据一样(例如,使用用户身份验证)。就服务器而言,Ajax在HTTP方面没有什么特别之处。
我怎样才能保护它,并确保只有从我的应用程序调用将获得相关的数据回来?
你不能。用户总是可以检查他们的浏览器向服务器请求什么并复制它。
通常,人们对用户而不是应用程序进行身份验证。