我正在尝试对HTML登录表单实施安全的CSRF保护,我知道实现CSRF保护的最佳方法是在会话中存储随机csrf_key,但我想将CSRF添加到我的登录和注册表单......而我不知道想为任何匿名的未注册用户存储多个会话...
所以我想创建最好的安全posibble而不使用会话或数据库,只有表单隐藏字段/&一个cookie,登录后我将使用会话csrf保护.
我对secure user_storage的想法只有csrf:
csrf_token = AES(ip + useragent + timestamp + random_data,csrf_aes_site_key)
当csrf_aes_site_key在配置文件中被硬编码时.并且在每次登录/注册后,我将解密AES字符串+ velidate,ip&ua匹配请求ip&ua,时间戳不是太匹配,比如5分钟(如果csrf_timestamp + 18000> = current_ts),random_data只是随机性(并确保同一用户在相同的ts中多次请求时不会获得相同的csrf_token)...
所以...它足够安全,它是一个很好的解决方案吗?如果没有,还有其他建议可以解决这个难题吗?谢谢!
编辑:我刚刚创建的实现,它工作正常,但它是否足够好?
完整示例:https: //github.com/itaiarbel/aes_based_csrf_protection
问题1:用户可以使用相同的令牌为下一个5min的bug获取csrf_token并成功提交给表单吗?如果用户提交多次,我该怎么办?只要不是csrf攻击......
问题2:如果页面打开5分钟,用户将忘记登录,(每5分钟自动重新登录页面?maby将其更改为1小时?)
您是否可以通过此实施发现任何特定的安全风险?或者我可以假设这是一种安全的CSRF保护方式吗?