Names with an apostrophe break the XPath queries in RtLocks, RtCounters, and RtCounter

オープン 初心者向け
#145 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
82/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
java
領域
backend, security

調査の方向性

issue に名前を埋め込む3つの XPath 式が示されている src/main/java/co/stateful/RtLocks.java、RtCounter.java、RtCounters.java から始めてください。これらのメソッドがクエリをどのように構築して実行するかを読み、その後、3か所すべてで安全な XPath リテラルの方法を一貫して使用してください。名前にどちらか一方、または両方の種類の引用符が含まれていても、選択される項目を変えずに、記載された操作が機能すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

A lock or counter name that contains a single quote makes the XPath expression invalid, so the call fails instead of finding the item.

The name is pasted straight into a single-quoted XPath literal:

// src/main/java/co/stateful/RtLocks.java:53
.nodes(String.format("/page/locks/lock[name='%s']", name))

// src/main/java/co/stateful/RtCounter.java:93
"/page/counters/counter[name='%s']/links/link[@rel='%s']/@href"

// src/main/java/co/stateful/RtCounters.java (delete)
"/page/counters/counter[name='%s']/links/link[@rel='delete']/@href"

Take locks.exists("it's"): the expression becomes /page/locks/lock[name='it's'], which is malformed XPath, so exists throws instead of returning a boolean. The same happens in counter.set(...), counter.incrementAndGet(...), and counters.delete("it's"). A name like x' or '1'='1 changes the query and may select another item.

Fix: build the XPath literal safely. Either pass the name as an XPath variable, or write a small helper that wraps the value in double quotes when it has a single quote, and uses concat(...) when it has both kinds of quotes. Use it in all three places.

主要言語
Java
スター
10
フォーク
3
平均マージ
4時間 33分
マージ済み PR(30日)
7

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

sttc/java-sdk のほかの issue

sttc/java-sdk の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。