因此,我对PHP文件有了一个基本的.ajax()POST方法。
我需要什么安全措施?
周围有几篇文章提到使用隐藏的MD5输入字段,您可以通过AJAX发送该字段并在PHP文件中进行验证。这足够好吗?
CSRF的风险在于,外部站点可能会将数据发送到您的站点,而用户浏览器会自动将身份验证cookie与它一起发送。
您需要某种方式来执行接收操作(您的$.ajax()方法正在向其发送POST数据),以便能够检查请求是否来自您站点上的另一个页面,而不是外部站点。
$.ajax()
有两种方法可以执行此操作,但是建议的方法是在请求中添加令牌,您可以检查令牌,而黑客无法访问令牌。
最简单的说:
黑客无法进入您的数据库,并且实际上无法读取您发送给用户的页面(除非他们受到XSS攻击,但这是另一个问题),因此无法欺骗令牌。
与令牌有关的所有事情是, 您可以预测 (并验证)令牌, 而黑客则不能 。
因此,最简单的方法是生成长而随机的内容并将其存储在数据库中,但是您可以构建加密的内容。我不仅会使用MD5用户名- 如果CSRF攻击者弄清楚了如何生成令牌,那么您将被黑客入侵。
另一种方法是将令牌存储在cookie中(而不是数据库中),因为攻击者无法读取或更改您的cookie,只是导致它们被重新发送。然后,您就是HTTP POST数据中的令牌与cookie中的令牌匹配。
您可以使它们变得更加复杂,例如,每次成功使用(防止重新提交)时都会更改的令牌,或者特定于用户和操作的令牌,但这是基本模式。