首頁  >  文章  >  後端開發  >  詳細介紹Web安全之XML注入的範例程式碼

詳細介紹Web安全之XML注入的範例程式碼

黄舟
黄舟原創
2017-03-08 16:48:412259瀏覽

XML注入攻擊,和SQL注入的原理一樣,都是攻擊者輸入惡意的程式碼來執行自身權限以外的功能。 XML是儲存資料的一種方式,如果在修改或查詢時,沒有做轉義,直接輸入或輸出數據,都將導致X​​ML注入漏洞。攻擊者可以修改XML資料格式,增加新的XML節點,對資料處理流程產生影響。

攻擊

以下是一個儲存註冊用戶資訊為XML格式的範例:

final String GUESTROLE = "guest_role";
...
//userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。
String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                request.getParameter("name")+
                "</name><email>"+
                request.getParameter("email")+
                "</email></USER>";
//保存xml
userDao.save(userdata);

可以看到,這段程式碼沒有進行任何的過濾操作。一個一般使用者註冊後,會產生這樣一筆資料記錄:

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com
    </email>
</USER>

攻擊者輸入自己email時,可以輸入以下程式碼:

user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com

最終使用者註冊後,資料就變成了:

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com</email>
</USER>
<USER role="admin_role">
    <name>lf</name>
    <email>user2@a.com
    </email>
</USER>

可以看到,多出了一條role=「admin_role」的管理員lf。達到攻擊目的。

防禦

還是那句老話,有攻擊就有防禦。防禦的原理其實也很簡單,就是對關鍵字串進行轉義:

& --> &
 < --> <
 > --> >
 " --> "
 &#39; --> &#39;

在XML保存和展示之前,對資料部分,單獨做轉義即可:

String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                StringUtil.xmlencode(request.getParameter("name"))+
                "</name><email>"+
                StringUtil.xmlencode(rrequest.getParameter("email"))+
                "</email></USER>";

這樣就解決啦。


以上是詳細介紹Web安全之XML注入的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn