我目前在我的php应用程序中添加了一个CSRF令牌保护机制 . 在我阅读时,唯一的要求是一个唯一的每用户令牌,我在php7中使用random_bytes生成 .
我担心的是,如果攻击者使用用户的浏览器发送http请求,浏览器是否会以任何方式发送令牌的会话变量? (因为用户具有与令牌关联的sessionid) .
我将令牌存储在会话变量echo的隐藏值中 .
例如:我的令牌存储在会话变量中,然后攻击者将我发送到具有csrf保护的更改密码页面,验证将不会通过? (我的浏览器cookie中已经有正确的会话标识符) .
谢谢
1 回答
以下是CSRF攻击的工作原理:
爱丽丝(有意或无意)访问
compromised.com
compromised.com
使用HTML表单,JavaScript或Flash或任何可以发出HTTP发布请求的内容向yoursite.com
发出HTTP post†请求 .这是有效的,因为Web浏览器会将Alice的
yoursite.com
会话cookie发送到yoursite.com
.由于Same-origin policy,
compromised.com
can send 它想要任何网站的任何数据,但来自其他网站的数据是 cannot read .以下是CSRF保护的工作原理:
yoursite.com
需要一个名为_csrf_token
(或类似)的HTTP post请求变量,并将其与您在服务器端会话内存中为Alice存储的内容进行比较 .您将
_csrf_token
的值写入HTML表单中的隐藏输入,因此它会自动与yoursite.com
中的表单发送由于同源策略,
compromised.com
无法从yoursite.com
读取_csrf_token
的值,因此其尝试发布到yoursite.com
将失败 .†它不一定要发布,但这很常见