teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

誤字の修正

2020/08/27 19:19

投稿

Yasumichi
Yasumichi

スコア1773

answer CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  - [気になるJava 分かったつもりで終われない。 Spring Data JPA JPQLインジェクション対策](http://bookmount8.blog.fc2.com/blog-entry-43.html)
10
10
 
11
- 以下、そういった危険性を承知の上、かつ、外部に公開しないような限定されたところで利用したいというニーズに対する回答とご理解ください
11
+ 以下、そういった危険性を承知の上、かつ、外部に公開しないような限定されたところで利用したいというニーズに対する回答とご理解ください
12
12
 
13
13
  【最初の回答】
14
14
  メソッド名が LIKE 検索用になっていないような気が。

3

記述に誤りがある部分を修正

2020/08/27 19:19

投稿

Yasumichi
Yasumichi

スコア1773

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  xebme さんのご指摘にある通り、ユーザー入力に「%」、「_」を許すことは、SQL インジェクションの危険性があります。以下のリンクが適切かどうか、精査できていませんが、参考になれば幸いです。
4
4
 
5
- - [完全なSQLインジェクション対策 – yohgaki's blog] (https://blog.ohgaki.net/complete-sql-injection-counter-measure)
5
+ - [完全なSQLインジェクション対策 – yohgaki's blog](https://blog.ohgaki.net/complete-sql-injection-counter-measure)
6
6
 
7
7
  > 「とにかくプレイスホルダを使おう」では脆弱性は無くなりません。
8
8
 
@@ -36,7 +36,7 @@
36
36
  private TaskSpecification taskspecification;
37
37
 
38
38
  public Page<TaskEntity> searchmaterial(String title, String titleKana,Pageable pageable) {
39
- return taskrepository.findByTitleAndTitleKana(String title, String titleKana, Pageable pageable);
39
+ return taskrepository.findByTitleAndTitleKana(title, titleKana, pageable);
40
40
  }
41
41
  }
42
42
  ```

2

質問者のコメントと xebme さんのご指摘を受け、修正。

2020/08/27 19:18

投稿

Yasumichi
Yasumichi

スコア1773

answer CHANGED
@@ -1,7 +1,49 @@
1
+ ★★★ 注意 ★★★
2
+
3
+ xebme さんのご指摘にある通り、ユーザー入力に「%」、「_」を許すことは、SQL インジェクションの危険性があります。以下のリンクが適切かどうか、精査できていませんが、参考になれば幸いです。
4
+
5
+ - [完全なSQLインジェクション対策 – yohgaki's blog] (https://blog.ohgaki.net/complete-sql-injection-counter-measure)
6
+
7
+ > 「とにかくプレイスホルダを使おう」では脆弱性は無くなりません。
8
+
9
+ - [気になるJava 分かったつもりで終われない。 Spring Data JPA JPQLインジェクション対策](http://bookmount8.blog.fc2.com/blog-entry-43.html)
10
+
11
+ 以下、そういった危険性を承知の上、かつ、外部に公開しないような限定されたところで利用したいというニーズに対する回答とご理解くださいる
12
+
13
+ 【最初の回答】
1
14
  メソッド名が LIKE 検索用になっていないような気が。
2
15
 
3
16
  [【Spring Data JPA】自動実装されるメソッドの命名ルール - Qiita](https://qiita.com/shindo_ryo/items/af7d12be264c2cc4b252)あたりとか、参考にならないでしょうか。
4
17
 
5
18
  【追記】
6
19
 
7
- TaskService が呼び出しているのが、taskrepository.findAll() なので TaskRepository で追加で定義したメソッドが使われるように修正する必要がありそうです。
20
+ TaskService が呼び出しているのが、taskrepository.findAll() なので TaskRepository で追加で定義したメソッドが使われるように修正する必要がありそうです。
21
+
22
+ 【追記その2】
23
+
24
+ > しかし、冒頭でアドバイスを頂いた「TaskRepository で追加で定義したメソッドが使われるように修正する必要がありそう」に関して、taskrepository.findAll() をどのように変更すれば良いかがわかりません。
25
+
26
+ 以下、動作確認はしていませんが。以下のように直した場合の動作を確認してみてください。
27
+
28
+ ```java
29
+ @Service
30
+ @Transactional
31
+ public class TaskService {
32
+
33
+ @Autowired
34
+ private TaskRepository taskrepository;
35
+ @Autowired
36
+ private TaskSpecification taskspecification;
37
+
38
+ public Page<TaskEntity> searchmaterial(String title, String titleKana,Pageable pageable) {
39
+ return taskrepository.findByTitleAndTitleKana(String title, String titleKana, Pageable pageable);
40
+ }
41
+ }
42
+ ```
43
+
44
+  ただし、この修正だとこれまでの「%」、「_」を使わない入力における部分一致検索が使えません。
45
+  xebme さんが
46
+
47
+ > さらに、検索条件を調べて、%_があればLIKE検索、なければ通常検索にしなければならず、ここにも設計不備があると思われます。
48
+
49
+ と書かれている通り、条件分岐が必要になると思います。

1

TaskRepository で追加で定義したメソッドが使われていないので追記

2020/08/27 13:19

投稿

Yasumichi
Yasumichi

スコア1773

answer CHANGED
@@ -1,3 +1,7 @@
1
1
  メソッド名が LIKE 検索用になっていないような気が。
2
2
 
3
- [【Spring Data JPA】自動実装されるメソッドの命名ルール - Qiita](https://qiita.com/shindo_ryo/items/af7d12be264c2cc4b252)あたりとか、参考にならないでしょうか。
3
+ [【Spring Data JPA】自動実装されるメソッドの命名ルール - Qiita](https://qiita.com/shindo_ryo/items/af7d12be264c2cc4b252)あたりとか、参考にならないでしょうか。
4
+
5
+ 【追記】
6
+
7
+ TaskService が呼び出しているのが、taskrepository.findAll() なので TaskRepository で追加で定義したメソッドが使われるように修正する必要がありそうです。