質問編集履歴

5

追加

2019/05/11 05:08

投稿

Masa-Y
Masa-Y

スコア30

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ```php
38
38
 
39
-
39
+ 【confirm.php】
40
40
 
41
41
  <?php
42
42
 
@@ -175,3 +175,5 @@
175
175
 
176
176
 
177
177
  ![イメージ説明](ed32b39774367a6613f9e88fa4626588.png)
178
+
179
+ ![イメージ説明](57af9c71de4963e68b958c335c769c17.png)

4

追加

2019/05/11 05:08

投稿

Masa-Y
Masa-Y

スコア30

test CHANGED
File without changes
test CHANGED
@@ -169,3 +169,9 @@
169
169
 
170
170
 
171
171
  ```
172
+
173
+
174
+
175
+
176
+
177
+ ![イメージ説明](ed32b39774367a6613f9e88fa4626588.png)

3

追加

2019/05/11 04:47

投稿

Masa-Y
Masa-Y

スコア30

test CHANGED
File without changes
test CHANGED
@@ -31,3 +31,141 @@
31
31
 
32
32
 
33
33
  この場合、どのような方法があるでしょうか。
34
+
35
+
36
+
37
+ ```php
38
+
39
+
40
+
41
+ <?php
42
+
43
+
44
+
45
+ function h($str) {
46
+
47
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
48
+
49
+ }
50
+
51
+
52
+
53
+ // 変数の初期化
54
+
55
+ $page_flag = 0;
56
+
57
+
58
+
59
+ if( !empty($_POST['confirm']) ) {
60
+
61
+ $page_flag = 1;
62
+
63
+
64
+
65
+ try {
66
+
67
+ // 未定義である・複数ファイルである・$_FILES Corruption 攻撃を受けた
68
+
69
+ // どれかに該当していれば不正なパラメータとして処理する
70
+
71
+ if (!isset($_FILES['upfile']['error']) || !is_int($_FILES['upfile']['error'])) {
72
+
73
+ throw new RuntimeException('パラメータが不正です');
74
+
75
+ }
76
+
77
+ // $_FILES['upfile']['error'] の値を確認
78
+
79
+ switch ($_FILES['upfile']['error']) {
80
+
81
+ case UPLOAD_ERR_OK: // OK
82
+
83
+ break;
84
+
85
+ case UPLOAD_ERR_NO_FILE: // ファイル未選択
86
+
87
+ throw new RuntimeException('ファイルが選択されていません');
88
+
89
+ case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過
90
+
91
+ case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 (設定した場合のみ)
92
+
93
+ throw new RuntimeException('ファイルサイズが大きすぎます');
94
+
95
+ default:
96
+
97
+ throw new RuntimeException('その他のエラーが発生しました');
98
+
99
+ }
100
+
101
+ // ここで定義するサイズ上限のオーバーチェック
102
+
103
+ // (必要がある場合のみ)
104
+
105
+ if ($_FILES['upfile']['size'] > 1000000) {
106
+
107
+ throw new RuntimeException('ファイルサイズが大きすぎます');
108
+
109
+ }
110
+
111
+ // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので
112
+
113
+ // MIMEタイプに対応する拡張子を自前で取得する
114
+
115
+ if (!$ext = array_search(
116
+
117
+ mime_content_type($_FILES['upfile']['tmp_name']),
118
+
119
+ array(
120
+
121
+ 'gif' => 'image/gif',
122
+
123
+ 'jpg' => 'image/jpeg',
124
+
125
+ 'png' => 'image/png',
126
+
127
+ ),
128
+
129
+ true
130
+
131
+ )) {
132
+
133
+ throw new RuntimeException('ファイル形式が不正です');
134
+
135
+ }
136
+
137
+ // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し,保存する
138
+
139
+ if (!move_uploaded_file(
140
+
141
+ $_FILES['upfile']['tmp_name'],
142
+
143
+ $path = sprintf('./files/%s.%s',
144
+
145
+ sha1_file($_FILES['upfile']['tmp_name']),
146
+
147
+ $ext
148
+
149
+ )
150
+
151
+ )) {
152
+
153
+ throw new RuntimeException('ファイル保存時にエラーが発生しました');
154
+
155
+ }
156
+
157
+ // ファイルのパーミッションを確実に0644に設定する
158
+
159
+ chmod($path, 0644);
160
+
161
+ echo 'ファイルは正常にアップロードされました';
162
+
163
+ } catch (RuntimeException $e) {
164
+
165
+ echo $e->getMessage();
166
+
167
+ }
168
+
169
+
170
+
171
+ ```

2

修正

2019/05/11 04:38

投稿

Masa-Y
Masa-Y

スコア30

test CHANGED
File without changes
test CHANGED
@@ -31,11 +31,3 @@
31
31
 
32
32
 
33
33
  この場合、どのような方法があるでしょうか。
34
-
35
-
36
-
37
- 【解決方法】
38
-
39
- ![イメージ説明](c6c34ae7ed2772e6dd9e156375ad8f2f.png)
40
-
41
- ![イメージ説明](cd32c314fec5f9eda9c3af818e5537b2.png)

1

追加

2019/05/11 00:02

投稿

Masa-Y
Masa-Y

スコア30

test CHANGED
File without changes
test CHANGED
@@ -31,3 +31,11 @@
31
31
 
32
32
 
33
33
  この場合、どのような方法があるでしょうか。
34
+
35
+
36
+
37
+ 【解決方法】
38
+
39
+ ![イメージ説明](c6c34ae7ed2772e6dd9e156375ad8f2f.png)
40
+
41
+ ![イメージ説明](cd32c314fec5f9eda9c3af818e5537b2.png)