只允许jQuery在特定页面加载

3

如果这个问题已经被问过了,我很抱歉,我已经通过谷歌搜索了但是没有找到答案。

我刚开始接触 jQuery,现在我想知道如何保护我的后端页面不被外部用户加载?

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

我希望这样说有意义吗?就像我说的,我刚开始学习 jQuery,现在正在考虑安全性。


欢迎来到SO,好问题 :) - Sarfraz
4
用 jQuery 做不到这个 - JavaScript 从来就不是为了安全而设计的。最好在服务器端处理。 - Mike Robinson
我同意,因为任何用户都可以修改页面上的JavaScript。你可以在PHP中创建身份验证系统,或者你可以使用.htaccess,后者更容易设置。 - Ted Gueniche
4个回答

4

关于唯一能做的事情,也是你应该做的事情,就是检查用户是否已经登录并且被授权删除帖子。你可以在delete-post.php脚本中通过检查会话变量来实现。

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

希望这可以帮到你。

编辑:欢迎来到SO. :)


0

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


0

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

如果您正在寻找一些真正快速且简单的东西,请考虑使用简单的http基本访问身份验证,或者如果仅供您自己进行管理,则硬编码IP不会是最糟糕的情况。

无论如何,您不能像您想要的那样在客户端执行任何用户验证,因为它太容易被欺骗。


0

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

Nonce旨在确保任何请求都来自于你预期的来源。

阅读此指南(全部内容!但与此问题特别相关的部分是关于CSRF漏洞的部分),以查看此概念的简单实现:http://php.robm.me.uk/

顺便说一下,永远不要使用GET请求执行任何破坏性操作。 永远。 基本规则。 总是使用POST。 实际上,有些人认为从应用程序中实际上删除任何内容都不是好习惯,只能直接从数据库中进行 - 只需设置一个“已删除”的检查即可执行软删除。 但当然,这与此问题没有直接关系。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接