2011-06-30 72 views
4

我有一个提交表单,其中有9个字段,其中6个需要验证,包括带有文件大小和文件类型验证的上传字段。PHP CSRF表单令牌+验证建议

生成一个随机令牌,以防止CSRF正在工作,但使用令牌时验证的正确方法是什么?

如果我在同一个文件中进行验证,则使用验证重新加载来重新生成令牌。 (这可以防止吗?我试过isset()但仍然可以重新生成。)但是使用同一个文件可以防止用户名和电子邮件被存储在会话中。

它是最好做一个单独的文件,然后重定向回在网址为每个错误基本变量的形式中的验证,即http://www.example.com/form?n=1

使用一个单独的文件也将意味着存储的表单数据在会话中,因此如果重定向中存在错误,可以重新填充表单。

任何帮助感激地收到。

回答

6

我发现this article by Chris非常适合解释CSRF是什么以及如何保护自己。

+1

感谢,他已覆盖比在书中略胜一筹。 –

+1

'md5(uniqid(rand(),TRUE));'不应该信任安全上下文。 https://stackoverflow.com/a/31683058/4357238 – Edward

1

从经验中,CodeIgntier做了很好的CSRF implementation,以及其他安全措施。我建议你仔细阅读他们的代码,以便对整个过程有一个很好的理解。另见this