回答編集履歴

1

編集途中のものをアップしてしまいました

2018/01/10 04:54

投稿

ockeghem
ockeghem

スコア11701

test CHANGED
@@ -1,8 +1,8 @@
1
- SQLインジェクション対策としては申し分ないと思います(参考記事はあまり参考になさらなかったのでしょうか?)が、以下のポイントがあります。
1
+ SQLインジェクション対策としては申し分ないと思います(参考記事の方針とかなり違うようですが、あまり参考になさらなかったのでしょうか?)が、以下のポイントがあります。
2
2
 
3
3
 
4
4
 
5
- 1. 例外を捕捉しよう
5
+ 1) 例外を捕捉しよう
6
6
 
7
7
  今のままですと、DB接続時以外の例外を捕捉しない状況です。例外はあり得ることですので、以下を追加すべきです。
8
8
 
@@ -22,9 +22,11 @@
22
22
 
23
23
 
24
24
 
25
- 2. 複文を禁止するオプションを指定しよう
26
25
 
26
+
27
+ 2) 複文を禁止するオプションを指定しよう
28
+
27
- 上記で、最後のオプションは、PDOで「複文」を禁止するオプションです。詳しくは下記の記事を参照ください。
29
+ 上記で、最後のオプション MYSQL_ATTR_MULTI_STATEMENTS は、PDOで「複文」を禁止するオプションです。詳しくは下記の記事を参照ください。
28
30
 
29
31
 
30
32
 
@@ -32,6 +34,20 @@
32
34
 
33
35
 
34
36
 
35
- 3. チェックに引っかかった場合のエラー処理
37
+ 3) チェックに引っかかった場合のエラー処理
36
38
 
37
39
  現在のプログラムだと、if (チェック) ... の else節がないので、チェックでエラーになった場合は何もしない仕様ですが、エラー表示するとか、ログにエラーを書き込むなど処理をするべきでしょう。
40
+
41
+
42
+
43
+ 4) エラー表示
44
+
45
+ エラーの内容を画面表示するのはそもそもよくありませんが、仮に表示するのであれば、XSS対策すべきです。このスクリプトではおそらく大丈夫ですが、状況によってはエラーメッセージ経由でのXSSとなります。
46
+
47
+
48
+
49
+ ```PHP
50
+
51
+ exit('データベース接続失敗。'. htmlspecialchars($e->getMessage()));
52
+
53
+ ```