在这个AJAX场景中,特别是在身份验证方面,最好的安全准则是什么


What are the best security guidelines in this AJAX scenario, with special regards to authentication?

[我希望这个问题不要太宽泛,我认为这个主题非常有趣,但我鼓励你告诉我这是否违反了政策。]

我的场景是:

  • 我有一个LAMP网站,它也存储敏感数据和文档
  • 只有注册用户才能在网站上操作,并且只能对某些数据和文档进行操作。用户存储在$_SESSION变量中
  • 大多数页面都实现了一种基本的权限控制,但一些重要的DB操作是通过AJAX调用的
  • AJAX安全性的实现非常糟糕,因为任何聪明的人都可以篡改发送他们喜欢的任何id的请求,并以极其简单的方式删除记录

要求一本完整的关于安全的书显然有点太多了(我已经在阅读并尝试了很多关于这个主题的内容(,我主要担心的是AJAX页面是否应该受到特殊对待,因为我需要保护整个软件以防止黑客攻击和其他问题。

让我们说,我主要关心的是AJAX页面是否应该被特殊对待

不是。他们应该得到与任何其他请求几乎完全相同的待遇所有HTTP请求都来自您的系统外部,并在客户端的控制下(因此或多或少可以由用户可以想象的任何内容组成(。

您可能返回JSON,可能返回完整的HTML文档,可能返回XML——但格式无关紧要,数据重要。

如果请求是敏感数据,那么您需要(在服务器上(对用户进行身份验证,然后确保他们有权查看/编辑该数据。

唯一的区别是你如何展示"你没有被授权"的信息。当您期望浏览器将数据加载到XHR时,您不能简单地返回带有登录表单的HTML文档。响应需要适当格式化,JavaScript需要能够处理它。

我有一个LAMP网站,它也存储敏感数据和文件

您应该尽可能少地存储敏感数据。尤其是当您不确定如何保护这些信息的安全/隐私时。例如,使用OpenID或其他东西进行身份验证。我真的很喜欢LightOpenID,因为它很简单。我创建了一个小的示例项目/库来查看lightopenId的使用情况。它通过使用OpenID选择器简化了OpenID的使用。当您使用OpenID时,您也使用安全的OpenID提供程序,密码也不会以明文形式通过网络传输,而是受到https://SSL的保护。

只有注册用户才能在网站上操作,并且只能在某些数据和文件。用户存储在$_SESSION变量中

是的,这就是会议的目的。

大多数页面实现一种基本的权限控制,但是一些重要的数据库操作是通过AJAX 调用的

你应该读一下OWASP的前十名。至少(不要在10时停止。(

AJAX安全性的实现非常糟糕,就像任何聪明的人一样可以篡改发送他们喜欢的任何id的请求并删除简单粗暴的记录

请参阅上一节。至少阅读OWASP前10部分。例如,许多人忽视的一些事情是CSRF。