你能通过PHP告诉一个ajax调用是来自一个页面还是一个控制台?

时间:2015-08-29 18:27:41

标签: javascript php ajax security

我通过PHP使用通过ajax发送的数据更新数据库。有没有办法判断发送数据的脚本是否被包含它的页面调用(远程托管),或者只是被某人检查过我的JS控制台?#34;检查了我的数据元素"并尝试拉快速?

提前致谢...

丹尼

2 个答案:

答案 0 :(得分:2)

他们之间真的没有办法说出来,但是你可以更加努力地完成工作 但是,既然你说'它不会开始战争',那么,有一些方法可以“保护”它。

第1步:创建“验证”电话
如果你还没有,那么第一步就是实现一些初步的AJAX调用来检索稍后在后面的调用中使用的某些变量,例如:

  1. 致电#1检索Security-Token
  2. 致电#2创建一个Cookie Security-Token-2
  3. 拨打#3使用Security-Token
  4. 加密Security-Token-2来调用您的php脚本

    您的网页会做什么,会使用存储在Cookie中的“令牌”解密发送的文本并使用它。

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

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

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

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

答案 1 :(得分:1)

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

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

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