我在某处读到JSF框架使用的视图ID有一个很好的副作用,就是充当请求令牌,从而挫败了CSRF。有人可以告诉我,如果这意味着我不必从编程的角度做任何事情(即)。作为程序员,如果我使用JSF,我不必担心CSRF吗?
答案 0 :(得分:3)
JSF确实通过javax.faces.ViewState
“内置”了对CSRF的保护。在JSF 1.x上,它只是“太容易”猜测。这已针对JSF 2.1修复。另请参阅JSF impl issue 812和JSF spec issue 869。
您的主要问题应该是XSS和SQL injections。成功的XSS攻击将成为保证成功的CSRF攻击的源泉。要避免使用XSS,请确保使用h:outputText
(重新)显示所有用户控制的输入,而不是“普通的”普通模板文本。 SQL注入不一定会导致潜在的CSRF漏洞,但它会泄漏或错误处理敏感数据。要避免这种情况,请确保您使用的是一个使用命名查询(JPA,Hibernate等)的可靠ORM框架,或者当您使用“普通的”JDBC时,请确保使用PreparedStatement
Statement
。
答案 1 :(得分:0)
这有保证吗? JSF的某些实现使用可由攻击者猜测的顺序ID。
这篇文章描述了Sun JSF-RI执行顺序视图ID生成而不是更接受的Java SecureRandom:
http://seamframework.org/Documentation/CrossSiteRequestForgery
答案 2 :(得分:-1)
对不起,我错了“我说我的JSF应用程序没有报告任何CSRF问题”。但是现在我想告诉你, JSF没有针对CSRF的“内置”保护。我已经使用CSRFTester工具进行了测试,它表明我的JSF应用程序容易受到CSRF攻击。此外,我还想告诉您,所有Java EE应用程序都容易受到CSRF攻击。我发现保护应用程序免受CSRF攻击的一种可能方法是生成随机令牌并将其附加到URL。 谢谢!