在使用AJAX发布到PHP时,有没有办法再次保护post操作?

在使用AJAX发布到PHP时,有没有办法再次保护post操作?,php,javascript,ajax,jquery,Php,Javascript,Ajax,Jquery,我想知道是否有任何方法可以防止AJAX帖子中的数据操纵?例如,使用某种散列。任何人都可以自由地向您的Web服务器发布他们想要的任何内容。他们甚至可能不使用浏览器来实现这一点。您不能在服务器之外执行任何操作来防止这种情况;您所能做的就是验证您的用户并验证他们提交的数据 您可以在JavaScript中发明的任何解决方案都很容易规避,这就是底层技术的本质。安全性不在于客户端的连接端,而在于将其向下推。您可以为客户端发送的每个值生成哈希。然后,您可以在服务器上检查哈希是否有效,如果无效,则放弃请求。 但

我想知道是否有任何方法可以防止AJAX帖子中的数据操纵?例如,使用某种散列。

任何人都可以自由地向您的Web服务器发布他们想要的任何内容。他们甚至可能不使用浏览器来实现这一点。您不能在服务器之外执行任何操作来防止这种情况;您所能做的就是验证您的用户并验证他们提交的数据


您可以在JavaScript中发明的任何解决方案都很容易规避,这就是底层技术的本质。安全性不在于客户端的连接端,而在于将其向下推。

您可以为客户端发送的每个值生成哈希。然后,您可以在服务器上检查哈希是否有效,如果无效,则放弃请求。
但这似乎有些过分,而且比实际检查服务器上接收到的值更难实现。

No–因为您必须计算客户端的哈希(我想您的意思是,不是salt),所以每个人都可以看到您是如何做到的,并计算他们自己的哈希,以获取他们想要发送给您的虚假数据。永远不要信任来自客户端的任何输入。是否要防止提供过多字段或无效值?当您执行post操作时,只进行验证可能会更容易,因此(a)确保所有值都是有效的,并且会在表单中提供,(b)确保用户可以访问他们提交的值(如果他们向受限表提供ID,则相关)。是的,始终在服务器端验证用户输入!防止“中间人”攻击?是的,SSL。防止客户伪造数据?不。你可以让它变得困难,但由于客户端总是有JavaScript的纯文本源,它仍然可以被伪造。这根本不是“salt”的意思……不完全正确。:)。例如,主键菜单(1-10)可以在服务器端散列,并作为列表提供给客户机以验证其使用情况。希望注入不允许值11的用户不能这样做,因为服务器没有为其提供散列,并且私有散列盐在客户端上不可见。然而,我同意这样一种方法比仅仅验证服务器端要复杂得多,而且无论如何都应该验证服务器端@哈弗不完全正确?您给出的示例仍然完全是服务器端安全性,而不是客户端安全性。在您的示例中,您可以完全放弃散列,只需向客户端发送10个数字的列表。在提交时,您仍然要检查提交的数字是否在包含10个值的服务器端列表中,无论这些值是否经过哈希处理。您所做的只是注入了一个完全没有意义的、100%冗余的散列步骤。实际上,您的场景中的所有安全性仍然存在于服务器端。好吧,重新阅读这个问题,它没有特别提到检查应该在客户端完成。我认为问题的主旨(当然可以更清楚)是:是否可以使用散列来检查提交的数据是否在原始形式提供的值范围内,而不验证每个值?我的回答是肯定的,因为这是对这个问题的直接回答,尽管一般来说,进行普通验证可能更容易。另外一个重要的问题:在写我的初始评论时,我想知道OP是否考虑了CSRF令牌之类的东西,但只是针对AJAX请求。这将确保提交正确的数据键,可能允许将键/值对注入到表中,而无需进一步检查是否使用了不允许的键。@halfer您仍在对照(哈希)值列表检查(哈希)输入。那为什么要把它们弄碎呢?您还没有解释为什么散列值会有帮助。