Kei*_*ith 36
CSRF的风险是外部站点可以向您发送数据,用户浏览器将自动发送身份验证cookie.
您需要的是接收操作的某种方式(您的$.ajax()方法是将POST数据发送到),以便能够检查请求是否来自您网站上的其他页面,而不是外部网站.
有两种方法可以做到这一点,但建议的方法是在您可以检查的请求中添加一个令牌,黑客无法访问.
最简单的:
$.ajax()包含令牌的请求添加参数.黑客无法访问您的数据库并且无法实际读取您发送给用户的页面(除非他们受到XSS攻击,但这是另一个问题)因此无法欺骗令牌.
对令牌而言,重要的是你可以预测(并验证)它并且黑客不能.
出于这个原因,最简单的方法是生成长而随机的东西并将其存储在数据库中,但您可以构建加密的东西.我不会只是MD5的用户名 - 如果CSRF攻击者弄清楚如何生成你的令牌你将被黑客入侵.
另一种方法是将令牌存储在cookie(而不是您的数据库)中,因为攻击者无法读取或更改您的cookie,只是让它们被重新发送.然后,您在HTTP POST数据中的令牌匹配cookie中的令牌.
您可以使这些变得更复杂,例如,每次成功使用时都会更改的令牌(防止重新提交)或特定于用户和操作的令牌,但这是基本模式.