保护PHP和AJAX之间的POST请求-无需用户输入

保护PHP和AJAX之间的POST请求-无需用户输入,php,jquery,ajax,security,post,Php,Jquery,Ajax,Security,Post,我在一个网站上有一个简单的组件,它对页面上产品集群中的所有产品ID执行查询,并将它们存储到jquery中的一个数组中。然后,我通过AJAX将该数组作为POST发送到PHP,最终将对所有ID执行db查询 我的问题是,如何保护来自AJAX/JS文件的数组进入帖子中的PHP文件,防止用户操纵。。。这意味着我可以在源代码中找到ID,并将其更改为一些随机值,甚至是恶意值 通常在用户输入场景中,您可以在PHP中执行真正的转义字符串或类似功能来覆盖传入的数据。既然我发送的是一组数值,那么保护POST请求的最佳

我在一个网站上有一个简单的组件,它对页面上产品集群中的所有产品ID执行查询,并将它们存储到jquery中的一个数组中。然后,我通过AJAX将该数组作为POST发送到PHP,最终将对所有ID执行db查询

我的问题是,如何保护来自AJAX/JS文件的数组进入帖子中的PHP文件,防止用户操纵。。。这意味着我可以在源代码中找到ID,并将其更改为一些随机值,甚至是恶意值

通常在用户输入场景中,您可以在PHP中执行真正的转义字符串或类似功能来覆盖传入的数据。既然我发送的是一组数值,那么保护POST请求的最佳方法是什么

谢谢,


-让我们假设您希望从客户端接收整数值数组

如果在原始PHP上编写,则代码可能如下所示:

if (isset($_POST['ids']) && is_array($_POST['ids'])) {
    $ids = array_map('intval', $_POST['ids']);
    $ids = array_unique($ids); // Optional.
    print(implode(', ', $ids)); // Print values.
}
用户输入示例:

ids[]=1&ids[]=2&ids[]=3&ids[]=malicious_input&ids[]=1
输出:

1, 2, 3, 0
intval
接受参数并返回其整数表示形式<代码>恶意输入变为
0
,在SQL查询中使用它是安全的

一些相关链接:


  • 如果你认为用户机器中的任何东西都可以被篡改的话,那就没什么可做的了。恶意用户可能是令人讨厌的。你无法阻止用户操纵,所以你编写代码是为了适应它。如果您的数据存储是SQL,那么您通常使用准备好的语句和绑定的参数来完成这项工作。。。每件事使用
    filter\u input
    验证提交,使用一些额外的逻辑案例验证正确的请求凭据。使用SSL阻止中间人攻击。但是您无法阻止客户端故意、意外或通过恶意第三方破坏数据。您所能做的就是验证到达服务器的内容,以确保它不会破坏您的业务逻辑或损坏您的数据。