如果我有现有的JSP标记库。在JSP中我可以添加:
<%@taglib uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" prefix="csrf" %>
<form>
...
<input type="hidden" name="<csrf:token-name/>" value="<csrf:token-value/>"/>
</form>
这是我尝试添加到JSF2 faclet页面的内容。它不喜欢这个。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:csrf="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld">
...
<h:form ...>
....
<input type="hidden" name="#{csrf:token-name}" value="#{csrf:token-value}"/>
</h:form>
甚至可以做我认为我能做的事情吗?
现在我收到此错误:
javax.servlet.ServletException: Encountered ":" at line 1, column 7.
Was expecting one of:
"}" ...
"." ...
"[" ...
">" ...
"gt" ...
"<" ...
"lt" ...
">=" ...
"ge" ...
"<=" ...
"le" ...
"==" ...
"eq" ...
"!=" ...
"ne" ...
"&&" ...
"and" ...
"||" ...
"or" ...
"*" ...
"+" ...
"-" ...
"/" ...
"div" ...
"%" ...
"mod" ...
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
...
答案 0 :(得分:0)
问题是#{csrf:token-name}
。这是expression language,csrf
被解释为变量(不存在)。现在,:
无法解释,因为它在EL表达式中不是有效的符号。
您必须使用name="<csrf:token-name/>"
,就像在第一个JSP中一样。不幸的是,在您的JSF2 faclet页面中,这将导致格式错误的XML,并且不会再次起作用。
那么,现在呢?无法使用<csrf:token-name/>
的内容设置变量。我查看了source of the token tag,并且不支持用于在变量中设置令牌。
可能的解决方法:
我找到了可能解决问题的第三种解决方法!
使用预防令牌生成表单
OWASP CSRFGuard JSP库实现了一个专门用于生成HTML表单的标记库,其中CSRF预防令牌自动嵌入为隐藏字段。 [...]
这意味着你可以做到:
<csrf:form ...>
...
</csrf:form>
无需自己使用<input type="hidden" name="<csrf:token-name/>" .../>
。
答案 1 :(得分:0)
由于我遇到同样的问题并且在网上没有好的答案,我会分享我的问题解决方法
因为您无法在faclets页面中使用JSP taglib,所以我提出了以下解决方法:
配置CSRF Guard https://www.owasp.org/index.php/CSRFGuard_3_User_Manual
创建一个简单的CSRF jsp页面(称为“csrfGuard.jsp”)
<%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld" prefix="csrf" %>
<input type="hidden" name="<csrf:tokenname/>" value="<csrf:tokenvalue/>" />
以您需要保护的所有表格插入该页面:
<form action="someAction" method="post">
<o:resourceInclude path="/csrfGuard.jsp" />
... Your Code ...
</form>
关于Omnifaces resourceInclude http://showcase.omnifaces.org/components/resourceInclude
的链接