解决方法
CSRF的风险在于,外部网站可能会向您发送数据,用户浏览器将自动发送身份验证cookie。
您需要的是接收操作的一些方法(您的$ .ajax()方法正在发送POST数据),以便能够检查请求是否来自您网站上的其他页面,而不是外部站点。
有几种方法可以做到这一点,但推荐的方法是向可以检查的请求添加一个令牌,并且黑客无法访问。
最简单的
>登录时创建一个长的随机字符串令牌并将其保存在用户身上。
>将参数添加到包含令牌的$ .ajax()请求中。
>请求检查令牌与您为用户保存的令牌相匹配。
>如果令牌不匹配,你有一个CSRF黑客。
黑客无法访问您的数据库,实际上无法读取您发送给用户的页面(除非他们得到XSS攻击,但这是另一个问题),所以不能欺骗令牌。
所有令牌重要的是您可以预测(并验证)它,黑客不能。
因此,最简单的方法是生成一些长时间随机的东西,并将其存储在数据库中,但是您可以建立加密的东西。我不会只是MD5的用户名 – 如果CSRF攻击者弄清楚如何生成你的令牌,你将被黑客入侵。
另一种方法是将令牌存储在cookie中(而不是数据库),因为攻击者无法读取或更改您的cookie,只会导致重新发送。那么你是cookie中的HTTP POST数据匹配令牌中的令牌。
您可以使这些更复杂,例如每次成功使用(防止重新提交)或特定于用户和操作的令牌时更改的令牌,但这是基本模式。