「テスト」と1 = 0を実行した人が見つかりました。 // * |私のサイトではXMLを使用しているので、これはXPATHのように見えますが、実際にはどういう意味ですか?私のサイトのテストで見つけたもの "と1 = 0] | // * |/* [" 0 ")
答えて
これはXPath injection attackで、文書内のすべてのノードを再帰的に取得しようとしました(//*
部分)。何が起こったのかを理解するには、例を挙げること。
subnode
の値をユーザーが入力したテキストで検索するXPath式を動的に構築するとします。あなたが使用するXML文書:
<root>
<node>
<subnode>value1</subnode>
<subnode>value2</subnode>
</node>
</root>
そして、あなたはこの表現があります:%s
は、ユーザーが入力した値のプレースホルダです//node[. = "%s"]
を。ユーザーはvalue1
と入力すると、//node[. = "value1"]
の式が生成されます。これは完全に安全で、<subnode>value1</subnode>
を返します。
しかし、今、ユーザーがtest" and 1=0] | //* | /*["0
クエリを入力した場合、ユーザーが何であったかアクセスし、この場合にも、ユーザーがroot
含めたすべてのノードになるだろう、構文的には正しいがある//node[. = " test" and 1=0] | //* | /*["0"]
、node
とsubnodes
になるだろうと想像アクセスしないでください。
//node[. = " test" and 1=0] | //* | /*["0"]
の表現を分解しましょう。攻撃者はtest" and 1=0]
部分を使用して既存の状態から抜け出し、1=0
条件を追加することなく一致させました。 |
は、XPathで「or」を意味します。 //*
は、文書内のすべてのノードに再帰的に一致します。これが攻撃者に何があったかを示します。式を構文的に正しいものに保ち、引用符のバランスを取るためには、/*["0
の部分が必要です。起きてからそれを防ぐために、いくつかの方法があります
は、hereを要約:
- サニタイズ/は、ユーザー入力を検証します。プリコンパイルされたXPathには、すでにプログラムが実行される前にプリセットではなく、ユーザーの後にその場で作成されている
:あなたが行うことができます最小は引用符に
使用を逃れるために、プリコンパイル XPath式であります入力が文字列に追加されました。 パラメータ化は入力が発生します。あなたは
- 使用パラメータ化 XPath式をエスケープされているはずの文字が欠落し心配する必要はありませんので、これは、より良いルートです文字列や整数などの特定のドメインに制限され、そのようなドメインの外部の入力は無効とみなされ、クエリは失敗します。
も参照してください:
- 1. シータ0とシータ1の値を見つけるには?
- 2. StanfordCoreNLPServer/0:0:0:0:0:0:0:0:9000このサイトにアクセスできない
- 3. "。"の前に1つだけ "0" in textBox_TextChanged
- 4. request.getRemoteAddr()を使用すると、0:0:0:0:0:0:0:1
- 5. [I] [0] [1]も上書き[I] [1] [0]及びその逆
- 6. 整数リストの中で最も長い0のシーケンスを見つける
- 7. の1の補数0 - 0
- 8. 1と0の集合で1のグループの先頭と末尾のインデックスを見つける方法
- 9. Androidでffmpegコマンドを実行すると、「 '-map 0:v:0 -map 1:a:0'」の適切な出力形式を見つけることができません。
- 10. オクターブ行列:1のと0に置き換わると私は言って、0と1の行列を持つ1の0の
- 11. エンティティフレームワーク0..1〜0..1アソシエーション
- 12. なぜ!(0 || 1 || 0)は0ですか?
- 13. タブロー:0と1
- 14. !0と!1は1と0よりも優れていますか?
- 15. スタックラン0テストでおいしい発見
- 16. ルビで1 && 0が0のときに0 && 1が1になるのはなぜですか?
- 17. 0から10の位の数字の逆を見つける
- 18. array_filterは1つの0と1つのnullを残します
- 19. 1から0へ... 1つの関係
- 20. 0と1の順列
- 21. [:、0]と[:、1]の意味plt.plot
- 22. UMLの構成1. *と0. *
- 23. Rails乱数0〜3の間で常に0または1
- 24. 1から0まで、または1つのEntityframeworkナビゲーションプロパティnull
- 25. 配列[beg [0]:end [0]、beg [1]:end [1]、...]
- 26. Ruby Minitest 0テスト
- 27. 0 + 0 + 0 ... + 0!= 0
- 28. テンソルが[0、1]の場合、テンソル[0]
- 29. エンティティフレームワーク0..1から0の関係
- 30. 0 1マトリクスバランシング
おかげで多くのことを、任意のアイデアは、これはもう起こり得ないことを確認する方法は? –
@AlexBouttelgier大丈夫です、確かに、いくつかの情報とリンクで答えを更新しました。 – alecxe
申し訳ありませんが、私はネットワーキングの人ですので、今は彼の問題であるウェブサイトの世話をする人にそれを渡します;)本当に感謝してくれてありがとう。 –