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

質問編集履歴

5

追加

2019/05/11 05:08

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -17,7 +17,7 @@
17
17
  この場合、どのような方法があるでしょうか。
18
18
 
19
19
  ```php
20
-
20
+ 【confirm.php】
21
21
  <?php
22
22
 
23
23
  function h($str) {
@@ -86,4 +86,5 @@
86
86
  ```
87
87
 
88
88
 
89
- ![イメージ説明](ed32b39774367a6613f9e88fa4626588.png)
89
+ ![イメージ説明](ed32b39774367a6613f9e88fa4626588.png)
90
+ ![イメージ説明](57af9c71de4963e68b958c335c769c17.png)

4

追加

2019/05/11 05:08

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -83,4 +83,7 @@
83
83
  echo $e->getMessage();
84
84
  }
85
85
 
86
- ```
86
+ ```
87
+
88
+
89
+ ![イメージ説明](ed32b39774367a6613f9e88fa4626588.png)

3

追加

2019/05/11 04:47

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,73 @@
14
14
  value値より大きい画像は無効になりましたが、
15
15
  confirm.phpへは進めてしまい、画像0KBとして送信できてしまいます。
16
16
 
17
- この場合、どのような方法があるでしょうか。
17
+ この場合、どのような方法があるでしょうか。
18
+
19
+ ```php
20
+
21
+ <?php
22
+
23
+ function h($str) {
24
+ return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
25
+ }
26
+
27
+ // 変数の初期化
28
+ $page_flag = 0;
29
+
30
+ if( !empty($_POST['confirm']) ) {
31
+ $page_flag = 1;
32
+
33
+ try {
34
+ // 未定義である・複数ファイルである・$_FILES Corruption 攻撃を受けた
35
+ // どれかに該当していれば不正なパラメータとして処理する
36
+ if (!isset($_FILES['upfile']['error']) || !is_int($_FILES['upfile']['error'])) {
37
+ throw new RuntimeException('パラメータが不正です');
38
+ }
39
+ // $_FILES['upfile']['error'] の値を確認
40
+ switch ($_FILES['upfile']['error']) {
41
+ case UPLOAD_ERR_OK: // OK
42
+ break;
43
+ case UPLOAD_ERR_NO_FILE: // ファイル未選択
44
+ throw new RuntimeException('ファイルが選択されていません');
45
+ case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過
46
+ case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 (設定した場合のみ)
47
+ throw new RuntimeException('ファイルサイズが大きすぎます');
48
+ default:
49
+ throw new RuntimeException('その他のエラーが発生しました');
50
+ }
51
+ // ここで定義するサイズ上限のオーバーチェック
52
+ // (必要がある場合のみ)
53
+ if ($_FILES['upfile']['size'] > 1000000) {
54
+ throw new RuntimeException('ファイルサイズが大きすぎます');
55
+ }
56
+ // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので
57
+ // MIMEタイプに対応する拡張子を自前で取得する
58
+ if (!$ext = array_search(
59
+ mime_content_type($_FILES['upfile']['tmp_name']),
60
+ array(
61
+ 'gif' => 'image/gif',
62
+ 'jpg' => 'image/jpeg',
63
+ 'png' => 'image/png',
64
+ ),
65
+ true
66
+ )) {
67
+ throw new RuntimeException('ファイル形式が不正です');
68
+ }
69
+ // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し,保存する
70
+ if (!move_uploaded_file(
71
+ $_FILES['upfile']['tmp_name'],
72
+ $path = sprintf('./files/%s.%s',
73
+ sha1_file($_FILES['upfile']['tmp_name']),
74
+ $ext
75
+ )
76
+ )) {
77
+ throw new RuntimeException('ファイル保存時にエラーが発生しました');
78
+ }
79
+ // ファイルのパーミッションを確実に0644に設定する
80
+ chmod($path, 0644);
81
+ echo 'ファイルは正常にアップロードされました';
82
+ } catch (RuntimeException $e) {
83
+ echo $e->getMessage();
84
+ }
85
+
86
+ ```

2

修正

2019/05/11 04:38

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -14,8 +14,4 @@
14
14
  value値より大きい画像は無効になりましたが、
15
15
  confirm.phpへは進めてしまい、画像0KBとして送信できてしまいます。
16
16
 
17
- この場合、どのような方法があるでしょうか。
17
+ この場合、どのような方法があるでしょうか。
18
-
19
- 【解決方法】
20
- ![イメージ説明](c6c34ae7ed2772e6dd9e156375ad8f2f.png)
21
- ![イメージ説明](cd32c314fec5f9eda9c3af818e5537b2.png)

1

追加

2019/05/11 00:02

投稿

Masa-Y
Masa-Y

スコア30

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,8 @@
14
14
  value値より大きい画像は無効になりましたが、
15
15
  confirm.phpへは進めてしまい、画像0KBとして送信できてしまいます。
16
16
 
17
- この場合、どのような方法があるでしょうか。
17
+ この場合、どのような方法があるでしょうか。
18
+
19
+ 【解決方法】
20
+ ![イメージ説明](c6c34ae7ed2772e6dd9e156375ad8f2f.png)
21
+ ![イメージ説明](cd32c314fec5f9eda9c3af818e5537b2.png)