Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过PHP,您能判断ajax调用是来自页面还是来自控制台吗?_Javascript_Php_Ajax_Security - Fatal编程技术网

Javascript 通过PHP,您能判断ajax调用是来自页面还是来自控制台吗?

Javascript 通过PHP,您能判断ajax调用是来自页面还是来自控制台吗?,javascript,php,ajax,security,Javascript,Php,Ajax,Security,我正在用通过ajax发送的数据通过PHP更新数据库。有没有办法判断发送数据的脚本是由包含数据的页面调用的(远程托管),还是只是被“检查我的元素”并试图快速获取数据的人侵入JS控制台 先谢谢你 Danny是phpcademy(现在的codecourse)在youtube上的一个指南,它详细地解释了如何在PHP中防止CSRF() 它涉及在每次提交表单时生成一个新的随机令牌。 之后,您将检查是否已发布令牌。如果不是,则请求不真实 编辑:您不必担心人们在查看页面时看到令牌,因为您有自己的(服务器端)验证

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

先谢谢你

Danny

是phpcademy(现在的codecourse)在youtube上的一个指南,它详细地解释了如何在PHP中防止CSRF()

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


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

实际上无法区分这两种令牌,但您可以让这项工作更加困难。
但是,既然你说“它不会发动战争”,那么从这个角度出发,有几种方法可以“保护”它

步骤1:创建“验证”调用 如果您还没有,那么第一步就是实现几个初步的AJAX调用,这些调用检索某些变量,这些变量稍后将在下面的调用中使用,例如:

  • 调用#1检索
    安全令牌
  • 调用#2创建cookie
    Security-Token-2
  • 调用#3使用
    Security-Token-2加密的
    Security-Token
    调用php脚本
  • 然后,您的页面将使用存储在cookie中的“令牌”对发送的文本进行解密并使用它

    步骤2:向javascript添加额外逻辑 您可以在javascript中添加一些编解码逻辑,
    我并不是说这将很难打破,但它可能很难,特别是如果你混淆了你的代码(我们都知道混淆是不好的,但请容忍我)

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

    (编辑)找到了我正在寻找的“动态名称生成”解决方案:

    该解决方案最初设计用于对付“自动填充”某些字段的Spambot,如果字段名看起来是随机的,它不知道哪些字段是“陷阱”,但是您可以使用它为AJAX调用生成名称


    但最终,它总是有可能被破解,一个人所需要的只是足够的时间和金钱

    如果他们“试图拉一个快速的”,他们真的可以让请求看起来像他们想要的任何东西。@Don'tPanic-这是一个很好的观点。我正在更新的内容不会引发任何战争或颠覆金融市场,所以简单的“非忍者”证明检查应该可以做到——如果有?你可以在ajax脚本中通过POST请求使用密钥/令牌,并使用令牌验证请求是否真实。@samaYo-我使用的是交易令牌(从服务器发送并由脚本返回),但它们作为变量保存,在开发工具中清晰可见,并且显然是必需的(因为它们是通过ajax调用发送的)。同意@samaYo。并了解有关
    跨站点请求伪造的更多信息
    (CSRF)是的,我正在使用一个令牌,在成功登录时生成并发送到客户端,客户端将其作为事务的一部分返回。一旦验证和处理,将发送一个新的令牌。我的观点是,这个令牌是公开可见的,在返回之前用于修改它的任何代码都是如此。我希望可以检查ajax的起源(除代币外)查看它是来自远程托管页面还是来自开发工具控制台。这可能会使实现可能的“破解”更加复杂,但我不认为这会真正阻止某人重新创建“令牌”检索部分。感谢您的回复,但我认为这一问题的答案在于Ajax调用的起源。Technicall你所有的JavaScript都来自客户端浏览器,我简直不敢相信浏览器供应商会给你这些工具,而且没有办法让服务器知道你使用过它们-如果你明白我的意思…@allnodcoms,是的,我明白你的意思,我会上网看看。