在我的应用程序中,我们在我们的freemarker模板中使用struts URL标记,如下所示:
<s.url action="struts-action-name"/>
问题在于,不是将动作网址附加到应用程序的根网址,而是将其实际附加到当前网址。
假设我们点击www.example.com/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development
,在该页面的ftl中我们有一个这样的表单:
<form action="<s.url action="struts-action-name"/>">
渲染的ftl看起来像这样:
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
导致弹出警报......是否有人处理此问题?这是Struts中的错误还是我们在这里做错了什么?
显而易见的解决方法是使用这样的URL标记:
<form action="<s.url value="/struts-action-name.jspa"/>">
另一方面,快速搜索显示项目中2500个标签的使用,并重构所有这些不是一个非常有趣/高效的工作:(
任何帮助,意见或建议都将受到高度赞赏。
-Andre
答案 0 :(得分:1)
url
标记不会“附加”到任何内容 - 它会创建相对于应用程序的URL,在这种情况下基于已配置的操作名称。假设名为“f1”的动作和根部署,标记唯一产生的是绝对URL /f1.action
(或者没有扩展名的`/ f1')。
假设:
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.action.extension" value=",,action"/>
<package name="default" namespace="/" extends="struts-default">
<action name="f1" class="radios.RadioAction" method="input">
<result name="input" type="freemarker">/WEB-INF/radios/input.ftl</result>
</action>
...
FreeMarker片段:
<@s.url action="f1"/>
将输出:
/f1
您可能需要提供更多信息:您使用的是特定插件(如Convention)等吗?
答案 1 :(得分:0)
您可以展开org.apache.struts2.views.jsp.URLTag
并替换现有内容,或在struts-tags.tld
中添加新代码。
答案 2 :(得分:0)
我觉得很奇怪它不会自动对URL的那些部分进行URL编码,因为这是我期望它做的。 所以我认为这是一个错误。也许可以联系Struts开发人员。他们的大多数其他标签都进行自动编码,所以这个标签没有。这很奇怪。