【问题标题】:Only Allow jquery to load certain pages只允许 jquery 加载某些页面
【发布时间】:2010-07-23 03:37:09
【问题描述】:

抱歉,如果已经有人问过这个问题,我已经进行了谷歌搜索,但找不到答案。

我是 jquery 的新手,我想知道如何保护我的后端页面不被外部用户加载?

例如,如果我的 jquery .post 或 .get 调用“delete-post.php”,我只希望 jquery 能够加载该页面。我不希望某些 John Doe 用户意识到他可以将数据从自己的表单发布到 delete-post.php 并删除他想要的任何内容,或者调用 delete-post.php?id=whatever_id_he_wants。

我希望这是有道理的?就像我说的,我是 jQuery 新手,我想知道安全性。

【问题讨论】:

  • 欢迎来到 SO 和好问题 :)
  • 不能用 jQuery 做到这一点 - javascript 从来都不是为了安全而设计的。最好在服务器端做点什么。
  • 我同意,因为任何用户都可以修改页面上的 javascript。您可以在 php 中创建身份验证系统,也可以使用 .htaccess 巫婆更容易设置

标签: php jquery


【解决方案1】:

关于您唯一能做的,也是您无论如何都应该做的事情,就是检查用户是否已登录并有权删除帖子。您可以通过检查会话变量在 delete-post.php 脚本上执行此操作。

这里的问题不在于 jQuery 或 AJAX,如果这是一个普通的静态表单,用户仍然可以弄清楚如何发布到这个 delete-post.php 页面。

希望这会有所帮助。

编辑:欢迎来到 SO。 :)

【讨论】:

    【解决方案2】:

    必须在服务器端验证您的输入。 Javascript 无法在这里保护您。在您的 delete-post.php 文件中,您应该进行多次检查以确保您网站上的授权用户正在调用脚本,并且您可以使用某种唯一的验证密钥来授权该操作。

    【讨论】:

      【解决方案3】:

      您可以检查传入的请求是否属于 xhttp/ajax 类型,但这只会告诉您帖子是如何制作的。您至少需要设置经过身份验证的会话的基础知识,以确定用户是否有权删除帖子。该权限将延续到 ajax 请求中。

      如果您正在寻找真正快速和肮脏的东西,请考虑简单的 http 基本访问身份验证,或者如果您独自管理,硬编码 IP 不会是您可能遇到的最糟糕的情况。

      在任何情况下,您都无法真正在客户端进行任何类型的用户验证,因为它太容易被欺骗。

      【讨论】:

        【解决方案4】:

        您应该考虑使用安全令牌(也称为“随机数”,如果您碰巧是英国人,这是一个有趣的术语选择)。

        nonce 旨在确保任何请求都源自您预期的来源。

        通读本指南(全部!但与此问题特别相关的是关于 CSRF 漏洞利用的部分)以了解此概念的简单实现:http://php.robm.me.uk/

        顺便说一句,永远不要使用 GET 请求做任何破坏性的事情。曾经。基本规则。始终使用 POST。事实上,有些人还认为从不实际上从应用程序中删除任何内容,只直接从数据库中删除任何内容是一种很好的做法 - 只需设置“已删除”检查以执行软删除。但这当然与这个问题没有直接关系。 :-)

        【讨论】:

          最近更新 更多