2011-10-07 142 views
1

在我的應用程序,我們使用Struts URL標籤在我們的freemarker模板是這樣的:Struts2的Freemarker的XSS漏洞

<s.url action="struts-action-name"/> 

的問題是,不是附加的動作URL到應用程序的根URL,它實際上追加它到當前的URL。

說我們打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

你可以擴展org.apache.struts2.views.jsp.URLTag和REPL在struts-tags.tld中退出或添加新標籤。

0

我的確發現它不會自動對URL的這些部分進行網址編碼,因爲這正是我期望它所做的。 所以我會考慮這個錯誤。也許可以聯繫Struts開發人員瞭解這個。他們的大多數其他標籤都是自動編碼的,所以這很奇怪。

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 

您可能需要提供更多的信息:您使用的特定插件(如公約)等?