Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security Struts2 Freemarker XSS漏洞_Security_Jakarta Ee_Struts2_Xss_Freemarker - Fatal编程技术网

Security Struts2 Freemarker XSS漏洞

Security Struts2 Freemarker XSS漏洞,security,jakarta-ee,struts2,xss,freemarker,Security,Jakarta Ee,Struts2,Xss,Freemarker,在我的应用程序中,我们在freemarker模板中使用struts URL标记,如下所示: <s.url action="struts-action-name"/> <form action="<s.url action="struts-action-name"/>"> <form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d17

在我的应用程序中,我们在freemarker模板中使用struts URL标记,如下所示:

<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>"> 
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">

问题在于,不是将操作url附加到应用程序的根url,而是将其实际附加到当前url

假设我们点击了www.example.com/community/examples/xss187ba“>警报(1)506d1768713/career_development,在该页面的ftl中,我们有这样一个表单:

<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>"> 
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">

渲染的ftl将如下所示:

<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>"> 
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">
alert(1)506d1768713/职业发展“>
这会导致弹出警报。。。有人处理过这个问题吗?这是Struts中的一个bug还是我们在这里做错了什么

显而易见的修复方法是使用URL标记,如下所示:

<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>"> 
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">

另一方面,快速搜索显示该标记在项目中使用了2500次,重构所有这些将不是一项非常有趣/高效的工作:(

如有任何帮助、意见或建议,将不胜感激


-Andre

您可以扩展
org.apache.struts2.views.jsp.URLTag
并在
struts tags.tld
中替换现有标签或添加新标签。您可以扩展
org.apache.struts2.views.jsp.URLTag
并在
struts tags.tld
中替换现有标签或添加新标签。我确实觉得它不自动运行很奇怪按语法url编码url的这些部分,这是我希望它能做的。
所以我会认为这是一个bug。也许联系Struts开发人员关于这一个。他们的大多数其他标签都是自动编码的,所以奇怪的是这个不是。

我觉得奇怪的是,它不自动URL编码URL的那些部分,因为这是我所期望的。
所以,我会认为这是一个bug。可能联系Struts开发人员关于这个问题。他们的大多数其他标签都是自动编码的,所以奇怪的是,这不是。

< P> >代码> URL< /Cult>标签没有“追加”到任何东西——它创建了一个相对于应用程序的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>
...

您可能需要提供更多信息:您是否正在使用特定插件(如约定)等?

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>
...
您可能需要提供更多信息:您是否使用特定的插件(如约定)等