ホームページ  >  記事  >  バックエンド開発  >  WebセキュリティにおけるXMLインジェクションのサンプルコードの詳細な紹介

WebセキュリティにおけるXMLインジェクションのサンプルコードの詳細な紹介

黄舟
黄舟オリジナル
2017-03-08 16:48:412262ブラウズ

XML インジェクション攻撃は SQL インジェクションと同じ原理を持ち、攻撃者は悪意のあるコードを入力して自分の権限を超えた機能を実行します。 XML はデータを保存する方法の 1 つであり、変更またはクエリの際にデータをエスケープせずに直接入力または出力すると、XML インジェクションの脆弱性が発生します。攻撃者は 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>

攻撃者が電子メールを入力すると、次のコードを入力できます:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。