当前位置: 首页 > 面试题库 >

jQuery .ajax()是否需要CSRF令牌?

袁玮
2023-03-14
问题内容

因此,我对PHP文件有了一个基本的.ajax()POST方法。

我需要什么安全措施?

周围有几篇文章提到使用隐藏的MD5输入字段,您可以通过AJAX发送该字段并在PHP文件中进行验证。这足够好吗?


问题答案:

CSRF的风险在于,外部站点可能会将数据发送到您的站点,而用户浏览器会自动将身份验证cookie与它一起发送。

您需要某种方式来执行接收操作(您的$.ajax()方法正在向其发送POST数据),以便能够检查请求是否来自您站点上的另一个页面,而不是外部站点。

有两种方法可以执行此操作,但是建议的方法是在请求中添加令牌,您可以检查令牌,而黑客无法访问令牌。

最简单的说:

  • 登录时,创建一个长随机字符串令牌并将其保存给用户。
  • $.ajax()包含令牌的请求中添加参数。
  • 根据要求检查令牌是否与您为用户保存的令牌匹配。
  • 如果令牌不匹配,则说明您有CSRF破解。

黑客无法进入您的数据库,并且实际上无法读取您发送给用户的页面(除非他们受到XSS攻击,但这是另一个问题),因此无法欺骗令牌。

与令牌有关的所有事情是, 您可以预测 (并验证)令牌, 而黑客则不能

因此,最简单的方法是生成长而随机的内容并将其存储在数据库中,但是您可以构建加密的内容。我不仅会使用MD5用户名-
如果CSRF攻击者弄清楚了如何生成令牌,那么您将被黑客入侵。

另一种方法是将令牌存储在cookie中(而不是数据库中),因为攻击者无法读取或更改您的cookie,只是导致它们被重新发送。然后,您就是HTTP
POST数据中的令牌与cookie中的令牌匹配。

您可以使它们变得更加复杂,例如,每次成功使用(防止重新提交)时都会更改的令牌,或者特定于用户和操作的令牌,但这是基本模式。



 类似资料:
  • 我有一个Spring Boot 1.5.12应用程序,默认情况下会启用CSRF保护。我在提交POST请求时使用CSRF令牌。 但是,有些URL需要通过GET请求获取,带有cookie信息,但不需要CSRF令牌,即。 我如何强制我的Spring Boot应用程序也需要CSRF令牌来处理这样的请求? PS:我有一些关于GET请求不需要CSRF保护的意见。但是,它也应该受到保护:https://www.

  • 当应用程序依赖于无状态身份验证(使用类似HMAC的东西)时,是否有必要使用CSRF保护? 示例: > 我们有一个单页应用程序(否则我们必须在每个链接上添加令牌:。 此内标识将用于访问诸如之类的受限URL。 令牌将始终在HTTP头内传输。 没有Http会话,也没有cookie。

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs

  • 问题内容: 我正在使用Hibernate Search,文档和书籍说我在id字段上需要@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象。 没有代码中的@DocumentId,我的代码似乎运行良好。Hibernate Search是否变得足够聪明,以至于@Id字段是一个很好的默认值?是否会引起一些不明显的问题? 谢谢你的时间! 问题答案: 如果您使用的是老式的

  • 问题内容: 以下代码: 是/是打开JDBC连接所必需的。 我听说现代JDBC驱动程序不再需要它。但是我无法在项目中将其删除,因为我遇到了异常。我正在使用Java7和tomcat7。 什么时候可以省略构建? 问题答案: 从JDBC 4.0开始,不需要Class.forName()。 这是JDBC的Java教程的摘录。 在 早期 版本的JDBC中,要获得连接,首先必须通过调用方法Class.forNa

  • 问题内容: 我需要从该站点下载哪个tar? 我已经尝试过fortrans,但是一直出现此错误(明显地设置了环境变量之后)。 问题答案: 该SciPy的网页用来提供构建和安装说明,但说明现在依靠操作系统二进制分发。要在没有预编译所需库软件包的操作系统上构建SciPy(和NumPy),必须先构建然后静态链接到Fortran库BLAS和LAPACK: 仅执行五个g77 / gfortran / ifor