如何安全地做 Ajax?

信息安全 应用安全 php csrf 阿贾克斯
2021-08-31 05:03:50

这个问题的灵感来自这个安全问题 https://security.stackexchange.com/questions/1707

  1. 使用 Ajax 的威胁是什么?(请注意,我说的是安全威胁,而不是功能缺陷)
  2. 如何安全地执行 Ajax?(请给出示例,最好是 PHP 中的示例,因为我使用的是CakePHP框架。)
2个回答

Ajax 只是通过 HTTP 传递数据——它不是魔法——所以你用与普通网页完全相同的方式来保护它——

  • 检查身份验证和授权
  • 对导出到浏览器的数据进行加密或添加加盐哈希检查以重新提交
  • 将请求中收到的任何数据视为潜在危险
  • 在适当的地方使用 HTTPS
  • 使用正确的方法转换数据离开您的 PHP
  • 使用基于其来源的正确方法转换输入脚本的数据(例如 json_decode)

AJAX 的威胁与普通 Web 请求所面临的威胁相同:XSS、SQL 注入等。需要注意的一点是,使用 AJAX,如果您从不受信任的来源(例如某些 Web 服务)加载数据,您还应该验证客户端上的数据,而不仅仅是服务器上的数据,否则有人可能会注入 javascript 和其他讨厌的东西。

使用与通常使用相同的方法来保护请求,因为 AJAX 只是一个 HTTP 请求。但请记住,除了检查“正常”的事情(检查用户权限、清理数据等)之外,还要检查他是否真的提出了请求或者他是否被欺骗了(例如另一个页面上的链接)。为此,请在每个 AJAX 请求中包含一个 CSRF 令牌并在服务器端对其进行验证(请参阅实现反 CSRF 表单令牌的正确方法是什么?)。尽管建议即使在正常请求中也使用 CSRF 令牌。

另一件事是,根据您在客户端执行的操作,还要清理那里的数据。否则,攻击者可能会将有害代码注入页面。如果您从第三方获取数据,这一点尤其重要,但最好对所有输入进行。