【问题标题】:Can you tell, via PHP, whether an ajax call came from a page or the console?你能通过 PHP 判断 ajax 调用是来自页面还是控制台?
【发布时间】:2015-08-29 18:27:41
【问题描述】:

我正在通过 PHP 使用通过 ajax 发送的数据更新数据库。有没有办法判断发送数据的脚本是由包含它的页面调用(远程托管),还是被“检查我的元素”并试图拉取的人入侵到 JS 控制台快吗?

提前谢谢...

丹尼

【问题讨论】:

  • 如果他们“试图拉一个快速的”,他们真的可以让请求看起来像他们想要的那样。
  • @Don'tPanic - 好点。我正在更新的内容不会引发任何战争或颠覆金融市场,因此应该进行简单的“非忍者”证明检查 - 如果有的话?
  • 您可以在 ajax 脚本中通过 POST 请求使用密钥/令牌,并使用令牌来验证请求是否真实。
  • @samaYo - 我正在使用事务令牌(从服务器发送并由脚本返回),但它们作为变量保存,在开发工具中清晰可见,并且显然是必需的(因为它们是由 ajax 调用发送)。
  • 同意@samaYo。并详细了解Cross-Site Request Forgery (CSRF)

标签: javascript php ajax security


【解决方案1】:

两者之间确实无法分辨,但是您可以使工作变得更加困难。
但是,既然你说“它不会引发战争”,那么解决这个问题,有几种方法可以“保护”它。

第 1 步:创建“验证”调用
如果您还没有,第一步是实现一些初步的 AJAX 调用,这些调用检索某些变量,这些变量稍后会在随后的调用中使用,例如:

  1. 调用 #1 检索 Security-Token
  2. 调用 #2 创建一个 cookie Security-Token-2
  3. Call #3 使用Security-Token 调用您的php 脚本,使用Security-Token-2 加密

然后您的页面会做什么,将使用存储在 cookie 中的“令牌”解密发送的文本并使用它。

第 2 步:在 javascript 中添加额外的逻辑
您可以在 javascript 中添加一些编码-解码逻辑,
我并不是说这很难破解,但它可能会很困难,尤其是如果您混淆您的代码(我们都知道混淆不好,但请耐心等待)

第 3 步:不要保留任何名称
您可以做的另一件事是从 AJAX 变量中删除所有名称,或者更好的是,名称每次都可以不同。
如果您想走得更远,您可以加密名称,并通过引入 IV 并将 IV 存储在 cookie 中,为加密添加随机性组件(甚至可能进行编码以增加安全性)。

(编辑)找到了我正在寻找的“动态名称生成”解决方案:
Dynamic Field Names in PHP
该解决方案最初旨在打击“自动填充”某些字段的垃圾邮件机器人,如果字段名称看起来很随机,它不知道哪些字段是“陷阱”,但是您可以使用它为您的 AJAX 调用生成名称。

但最终,总是有可能破解,只需要足够的时间和金钱。

【讨论】:

  • 感谢您的回复,但我认为这个问题的答案在于 Ajax 调用的起源。从技术上讲,所有 JavaScript 都来自客户端浏览器,我简直不敢相信浏览器供应商给了你这些工具,却无法让服务器知道你已经使用了它们——如果你明白我的意思......
  • @allnodcoms,是的,我明白你的意思,我会在网上看看。
【解决方案2】:

This 是 phpcademy(现为 codecourse)的 youtube 指南,它彻底解释了如何在 PHP 中防止 CSRF (Cross Site Request Forgery)。

它涉及每次提交表单时生成一个新的随机令牌。 之后,您检查是否已发布令牌。如果不是,则请求不真实。

编辑:您不必担心人们在检查页面时会看到令牌,因为您有自己的(服务器端)验证令牌的方式。

【讨论】:

  • 是的,我正在使用一个令牌,在成功登录时生成并发送到客户端,客户端将其作为交易的一部分返回。一旦经过验证和处理,就会发送一个新令牌。我的观点是这个令牌是公开可见的,任何用于在返回之前修改它的代码也是如此。我希望可以检查 ajax 的来源(除了令牌之外),看看它是来自远程托管页面还是开发工具控制台。
  • 这可能会使实现可能的“破解”变得更加复杂,但我看不出这会如何真正阻止某人重新创建“令牌”检索部分。
猜你喜欢
  • 1970-01-01
  • 2012-04-07
  • 2015-03-28
  • 2011-06-03
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多