2016-09-21 98 views
1

我有如下上午XML代碼限制在XML文件中的實體標籤:如何使用XSD

<request><param name=\"client-id\" value=\"organization\"/><param name=\"client-org-id\" value=\"3042d80e24cd4cc31eb9ef48e7012\"/><param name=\"user-agent\" value=\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0\"/><param name=\"client-browser\" value=\"Firefox 48\"/><param name=\"domain-id\" value=\"layout\"/><param name=\"view-id\" value=\"1\"/><param name=\"view-token\" value=\"layout|get-workspace|\"/><param name=\"view-action\" value=\"private.layout:get-workspace\"/><param name=\"view-parent-id\" value=\"\"/><param name=\"view-parent-token\" value=\"\"/><param name=\"view-parent-action\" value=\"\"/></request> 

,在這裏我得到上面的XML作爲字符串,我使用XOM解析器解析XML。現在我的問題是我的應用程序通過安全掃描了和參數,通過它我得到的XML字符串如下注入外部XML:

<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE acunetix [><!ENTITY acunetixent SYSTEM \"http://hitrlWBrzWDQ0.bxss.me/\">]><xxx>&acunetixent;</xxx> 

所以我想,以防止外部實體。對我來說最好的解決方案是什麼?或者在使用xsd解析XML時避免xml中的ENTITY標籤的任何解決方案。提前致謝。

回答

1

我害怕,你不能做到這一點在XOM

http://www.xom.nu/infoset.xhtml,你可以閱讀

所有的實體引用被擴展了。 XOM不允許未擴展的實體引用。

+0

感謝您提供此信息。請爲這種情況建議一些解決方案。 –

0

首先,你已經張貼在 XML。您必須刪除雙引號字符前面的所有反斜槓\字符",以便您發佈的內容格式良好。

所以我想要防止外部實體。

如果您認爲您希望防止外部實體被注入到您的XML中,那麼我們可能無法幫助您,因爲大概我們和您都不能控制正在注入的安全掃描它。

如果你這樣做意味着你想阻止實體引用被擴展,那麼意識到XML解析器是假設來擴展實體引用,並且通常不會提供重寫此行爲的方法。 @innovimax(+1)已經記錄了XOM不支持。當實體引用在高級中已知時,請參閱here以瞭解XSLT中的黑客行爲。

最後要注意的是,無論是對您的請求的解釋,XSD都沒有任何作用。

+0

請注意,解析內聯DTD導致安全漏洞,例如XXE或「十億笑」(請參閱​​https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing),安全最佳實踐是禁用內聯DTD處理,因爲攻擊者可以將其DTD添加到從用戶輸入處理的任何XML中。 –