- 0.0.1. サイバー攻撃についてまとめてみた
- 0.0.2. 補遺: Laravel でテスト駆動開発するときの守破離と序破急
- 0.0.3. リーダブルコード・PSRから学ぶ 命名規則
- 0.0.4. 外部キー制約をかけてる親と子の削除の仕方(Laravel )
- 0.0.5. laravel5.5 シーダーファイルについてまとめる
- 0.0.6. laravel8のマイページの作り方(初心者向け)
- 0.0.7. ロール切替をしてaws-sdk-phpを使う
- 0.0.8. Laravelで毎月の支出を確認するお小遣い帳をつくる(1)
- 0.0.9. Laravelでクラスのひな形を作成する方法の決定版
- 0.0.10. Laravelでデータベースのテーブル名やカラム詳細情報を取得する方法
- 0.0.11. バリデーションのメッセージ カスタマイズしてみた
- 1. バリデーションのメッセージカスタマイズ
- 1.0.1. [docker + laravel(PHP)] GETパラメータが取得できない
- 1.0.2. 【PHP】ジャンケンゲーム
- 1.0.3. 楽天モバイルの料金プランを JavaScript と PHP と Python で組んでみた。
- 1.0.4. [PHP]フォームセキュリティ(XSS・CSRF)
- 1.0.5. Wowza Streaming EngineのSecureTokenで利用するハッシュの生成方法
- 1.0.6. laravel アプリのローカルにあるPDFファイルをブラウザで表示する
- 1.0.7. Brightcove LIVE APIからデータ取得する方法(Lambda@Edge)
- 1.0.8. nextcloud が用意する公式 Docker イメージで memory_limit, upload_max_filesize, post_max_size を設定し起動する
- 1.0.9. Compile Error: Declaration of EntityManager_xxxxxxx::getProxyInitializer() が出た時の対応
サイバー攻撃についてまとめてみた
#はじめに
最近勉強していてふと、「あれ、ただ機能をつくるだけじゃなくてサイバー攻撃についても知識も学ばないと企業に大損害与えるエンジニアになってしまうのでは?」と不安になりました。今回は、世の中のサイバー攻撃についてまとめていきます#サイバー攻撃の目的
そもそも、サイバー攻撃ってなんのためにやるんでしょうか?暇つぶし?利益の強奪?
理由については、様々ありますが主なものとして金銭の要求が挙げられます。例えば、不正アクセスで個人情報やクレジットカードの番号を盗み取ったり、あるいは盗んだ機密情報で金銭の要求をしたりする事例があります。他にも、不満を持つ企業や組織が運営するシステムにダメージを与えて、損害を発生させることを目的としたサイバー攻撃もあるみたいです。本当に厄介ですが、エンジニアたるものこうした悪とも戦わないといけません!#サイバー攻撃の種類
それでは、実際にどんな攻撃があって、現実にどんなことが起きたのかみていきましょう
##マルウェア
マルウェアは、コンピュータやネットワークに被害を与えることを目的に作られた不正なソフトウェアの**総称**です。有名なもので言えば
補遺: Laravel でテスト駆動開発するときの守破離と序破急
## この記事について
2021/5/29 に行われた PHPカンファレンス沖縄2021 にて同名タイトルで発表させていただいた内容の補遺です。
資料はこちらです。
https://app.pitch.com/app/public/presentation/a47a906e-6b08-47d6-b5bd-cebdb47c9a57/5cd29fef-3fca-485d-a720-332b689453b0テスト駆動開発未経験者、あるいはトライしたことはあるけどやめてしまった、というような方を想定し、デモで実際にコードを書きながら流れを説明したんですが、思い返すと少しスピードが速かったかな、と思ったので、テキストで補足することにしました。
本記事のコードと発表時のコードとに相違がある場合は、基本的にこちらを正としていただければ、と思います。
## はじめに
### 環境
– PHP: 8.0.2
– Laravel: 8.40.0### お題
運転代行サービスの運賃見積もり
ドライバー用のアプリケーションの API で、乗車時に出発地点と到着地点の座標をもとに距離を計
リーダブルコード・PSRから学ぶ 命名規則
先日の社内ランチ勉強会にて発表した内容をまとめます。
リーダブルコードはJavaやC++等で書いてあり、サンプルコードがしっくりこないことがあります。
今回は私が最も馴染みがあるPHPに落とし込んで読んでいきます。# 参考資料
– [リーダブルコード(2章 名前に情報を詰め込む)](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theo
外部キー制約をかけてる親と子の削除の仕方(Laravel )
勉強用メモです
まず外部キー制約とは、ざっくり自分の理解だと
『親テーブルと子テーブルがあって、「子テーブルのこのカラムには好き勝手な値を入れちゃダメだよ。親テーブルのこのカラムから選んで入れてね」な制約のこと』で、親テーブルのあるレコードと、関係してる子テーブルのレコードを同時に消したい。
でも制約があるからControllでただ“`delete()“`実装してもエラーになりました(でも実装は必要です)そんな時は、外部キー制約を実装したmigrationファイルにこう書きます
“`
$table->foreign(‘folder_id’)->references(‘id’)->on(‘folders’)->onDelete(‘cascade’);
“`foreignには 子テーブルで親と連携したいカラム
referencesには 親の何のカラムと連携したいか
onには 親migrationのテーブル名
の後ろに“`
onDelete(‘cascade’);
“`
を入力したら親が削除されたら子も削除できるようになりました!
あ、
“`
php
laravel5.5 シーダーファイルについてまとめる
#シーダとは
データベースのテーブルにダミーのレコードを準備する機能
「シーディング」と呼ばれる。これは、シード(最初から用意しておくレコード)を生成する機能主な手順は3つ
①シーディングのためのシーダーファイルを生成する。
②シーディングファイルを編集してシードを追加していく
③コマンドでシーディングを実行する#シーディングのためのシーダファイルの生成方法
Laravelのappアプリ名ディレクトリ直下で以下のコマンドを実行“`
php artisan make:seeder ファイル名(例 UserTableSeeder)
“`database/seedsにファイルが生成されているため編集
“`php:database/seeds/UserTableSeeder
DB::table(‘employees’)->insert([
[
‘name’ => ‘テストユーザー1’,
‘email’ => ‘test1@example.com’,
‘password => Hash
laravel8のマイページの作り方(初心者向け)
#今回の完成品
始めの状態がこの画面で、、、、
![スクリーンショット 2021-05-29 13.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/9c2dd457-b387-b2d0-01f8-6bfd3c470ed6.png)
マイページ画像を変更すると、
![スクリーンショット 2021-05-29 13.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/6cbaa4e1-a720-8dc2-2147-7e099c78d7b0.png)
こうなります!!!
#具体的に実装するもの
– マイページの制作
– usersテーブルから認証済ユーザーのデータを取得
– usersテーブルにマイページ写真の初期値を入れる
– 認証済みユーザーがマイページ写真を新たに選定した際、usersテーブルの初期値と入れ替える#ログイン中のユーザーのデータをusersテー
ロール切替をしてaws-sdk-phpを使う
# ロール切替をしてaws-sdk-phpを使う
環境別にアクセスキー・シークレットアクセスキーを変更せずスイッチロールを使ってアクセス環境を変更してみた
スイッチロールはこちらの記事を参考
https://qiita.com/morita-toyscreation/items/eeba120471cfad628c49
## aws-sdk-phpの導入
PHP側でAWSを使うためaws-sdk-phpを使う
composerを使って導入*composer.json*
“`json
{
“name”: “sample/sample”,
“authors”: [
{
“name”: “morita-toyscreation”,
“email”: “morita@toyscreation.jp”
}
],
“require”: {
“aws/aws-sdk-php”: “3.*”
}
}
“`*インストール*
“`
$ composer install
“`## ユーザー追加
ロール切
Laravelで毎月の支出を確認するお小遣い帳をつくる(1)
# 記事の目的
– 約2ヶ月ほどさわっていたLaravelの使い方の備忘録
– 未来の自分のため、artisanコマンドぐぐったり教材見返さなくてこれを見返せばいいようにしたい。# 注意点
– 下記の大きな流れにそって、記事を更新していくので、小出しに出していきます。
– 経験がまだまだ浅いので、内容に不備があればコメントいただけると助かります。## 大きな流れ
– Dockerで環境構築
– CRUD作成
– クロス集計について
– UIの調整(Bootstrapを使用)
– jsライブラリとの連携
– リファクタ(未定)
– AWSのEC2にデプロイ(未定)# 環境
– MacOS 10.15.6
– PHP 7.4.18
– Composer 2.0.10# Dockerで環境構築
– こちらの記事が神なので、これを参考にする。
– https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
– なお、php-MyAdminを使用したいので、下記記事を参考にしながた、docker-compose.ymlには下記
Laravelでクラスのひな形を作成する方法の決定版
## はじめに
この記事はLaravelを使ったクラスのテンプレートファイルの作成についての記事です。
この記事を読み終えた頃には誰でも自由なテンプレートを作れるようになります。## 対象
– PHP 8.0
– Laravel 8.0※下位環境でも動作する場合がございます
## 初級編
“`
php artisan make:cast クラス名 // 新しいEloquentキャストクラスを作成します
php artisan make:channel クラス名 // 新しいブロードキャストクラスを作成します
php artisan make:command クラス名 // 新しいコマンドクラスを作成します
php artisan make:component クラス名 // 新しいコンポートネントクラスを作成します
php artisan make:controller クラス名 // 新しいコントローラクラスを作成します
php artisan make:event クラス名 // 新しい
Laravelでデータベースのテーブル名やカラム詳細情報を取得する方法
## はじめに
この記事はLaravelを使ったテーブル名一覧や各カラム詳細情報の取得方法についての解説記事です。## 動作確認環境
– PHP 8.0
– Laravel 8.0※下位環境でも動作する場合がございます
## 全テーブル情報の取得
“`php
use DB;// 全スキーマ情報を取得
$schema = DB::connection()->getDoctrineSchemaManager();// テーブル名一覧を取得
$tableNames = $schema->listTableNames();foreach ($tableNames as $tableName) {
// テーブル情報を取得
$schema = DB::connection()->getDoctrineSchemaManager();
$table = $schema->listTableDetails($tableName);// カラム情報を取得
$columns = $table->getColumns();$c
バリデーションのメッセージ カスタマイズしてみた
バリデーションのメッセージカスタマイズ
validation.phpの中エラーメッセージを変更せずに、オリジナルのバリデーションメッセージを
設定してバリデートメッセージを出せたので記事にしました。基本的には英語ですが、validation.phpの中に設定されています。
日本語版は下記から確認できます。
https://readouble.com/laravel/5.6/ja/validation-php.html一部ですが、こんな感じでバリデーションメッセージが設定されています。
attributeは好きなように設定できます。'required'=> ':attributeは必須です。', 'unique' => ':attributeは既に存在します。', 'attributes' => [ 'first_name'=>'姓名', 'last_name'=>'姓名', ]下記のようにバリデーションを設定できます。
このように設定すると、first_name、last_nameが空欄の場合、
姓名は必須です。な
[docker + laravel(PHP)] GETパラメータが取得できない
##環境
laravel 8.x
php 8.0##問題
dockerのlaravel環境にて開発中にGETパラメータが取得できない問題に遭遇しました。以下を例に問題を示します。“`php
【PHP】ジャンケンゲーム![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/69330fa5-764d-b36b-39f2-c11fc00eb414.png)
1・画面のレイアウトは画像の通り
2・ユーザーはグー・チョキ・パーのいずれかをラジオボタンで入力する
3・ユーザーの手がsubmitされたら、ユーザーの手を表示する
4・ユーザーの手がsubmitされたら、コンピュータの手をグー・チョキ・パーからランダムに選択し、表示する
5・ユーザーの手がsubmitされたら、じゃんけんの勝敗を判定し、出力する“`PHP
楽天モバイルの料金プランを JavaScript と PHP と Python で組んでみた。
![楽天モバイルの料金プラン (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/778930/a314fdc4-f0f0-5102-053c-53b47573e4e2.png)
#目次
[1.楽天モバイルのホームページ](#1-楽天モバイルのホームページ)
[2.処理の流れ](#2-処理の流れ)
[3.作成したプログラム](#3-作成したプログラム)#1. 楽天モバイルのホームページ
楽天モバイルのホームページが画像だったので、・画像をトリミング
↓
・google Keep で、画像のテキストを抽出
↓
・テキストを取り出す![楽天モバイルの料金プラン (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/778930/36f8e6c2-0bff-5514-ac43-a5f4020a47ea.png)
#2. 処理の流れ
1のテキストを整形する
OGB~
[PHP]フォームセキュリティ(XSS・CSRF)
#はじめに
今回はフォームセキュリティを意識した実装についてまとめていきます!#XSS(クロスサイトスクリプティング)
まず、クロスサイトスクリプティングってなんだろうか?というところからまとめてみます。
ネット調べると以下のようなことみたいです。クロスサイトスクリプティング(XSS)とは、攻撃対象のウェブサイトに、脆弱性がある掲示板のようなウェブアプリケーションが掲載されている場合に、悪意のある第三者がそこへ罠を仕掛け、サイト訪問者の個人情報を盗むなどの被害をもたらす攻撃です。また該当するような脆弱性をさしてクロスサイトスクリプティングと呼ぶこともあります。
(引用URL:https://www.kagoya.jp/howto/network/xss/)自分の言葉に変えてまとめると、「フォームや投稿画面に悪意あるプログラム文を入れるとブラウザはそれを投稿の文ではなく、一つのプログラムと認識して外部から操作されてしまう!」といった感じでしょうか。なのでデマニュースとか流せてしまうというわけですね。
#CSRF(クロスサイトリクエストフォージェリ)
CSRFについても[こ
Wowza Streaming EngineのSecureTokenで利用するハッシュの生成方法
# Wowzaの視聴制限について
Wowzaというストリーミングサーバーには視聴用URLに
・視聴用URLの改変を確認するハッシュ(hash)
・視聴用URLが有効になる(視聴できるようになる)日時(starttime)
・視聴用URLが無効になる(視聴できなくなる)日時(endtime)
が付与でき、Wowza側でそれらの情報を元にした視聴継続判定を行うことができます。この機能が適用されるのは視聴時(play)のみのため、配信(publish)側に影響はありません。(配信時のURLを変更する必要がなく継続して利用できます)
# Wowza のサイト
具体的な利用方法については以下のサイトに記載されています。
またハッシュの生成についてはページ中ほどの「Hash generation」にて説明されています。Use Wowza SecureToken to protect streams
https://www.wowza.com/docs/how-to-protect-streaming-using-securetoken-in-wowza-streaming-engin
laravel アプリのローカルにあるPDFファイルをブラウザで表示する
# 目的
– laravelを構成するファイルのローカルに保存されているPDFファイルをブラウザ表示させる方法をまとめる
# 環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
Brightcove LIVE APIからデータ取得する方法(Lambda@Edge)
# サーバーサイドの実装(Lambda@Edge – node.js)
※注意: GETとPUT(パラメータなし)のみ動作確認しています。
POSTやDELETEはパラメータの書き方が違うはずなので、別途実装する必要があります“`javascript:index.js
/**
* フロントから直接ブライトコーブAPIに問い合わせると、
* CORSポリシー違反でデータ取得ができないため実装した
*
* 2021.05時点ではGETとPUTのみ動作確認済
*
* フロントからAJAX経由で送られてくるHTTPメソッドとURLを用いて
* それに応じたブライトコーブAPIのレスポンス(JSON)を返す
* 例えば、AJAXで次のURLにGETリクエストが届いたら、Lambda@Edge(このindex.js)が発火
*
* https://www.example.com/bc-proxy/redundantgroups/xxxxxxxxxxxxxxxx
*
* bc-proxy以下のURLを切り取ってLambda@Edgeに渡し、ブライトコーブAPIに
nextcloud が用意する公式 Docker イメージで memory_limit, upload_max_filesize, post_max_size を設定し起動する
## これはなに
+ Docker版 nextcloud を構築していた際に nextcloud 側で設定されている `PHP_UPLOAD_LIMIT` の上限に引っかかってしまい、設定を上書きをするために簡単に調査したのでまとめました。## デフォルトの設定
`memory_limit` `upload_max_filesize` `post_max_size` ともにデフォルト値は 512M です
## 設定方法
以前は php.ini を作成し公式イメージをベースに Dockerfile を記述していましたが、 ENVを渡せば php.ini が条件に沿って自動生成されるように変更されていました。
`memory_limit` の設定を行ないたい場合は `PHP_MEMORY_LIMIT` に `1024M` 等の値を渡します。
`upload_max_filesize` `post_max_size` の設定を行いたい場合は `PHP_UPLOAD_LIMIT` に同様に `1024M` 等の値を設定します。
Dockerfile に直接記述する場合は以下
Compile Error: Declaration of EntityManager_xxxxxxx::getProxyInitializer() が出た時の対応
プロキシの生成でコケてたらsymfonyのコンパイルエラーに遭遇した
“`bash
Compile Error: Declaration of EntityManager_9a5be93::getProxyInitializer()
must be compatible with ProxyManager\Proxy\LazyLoadingInterface::getProxyIn
itializer(): ?Closure
“`
今回はその対応。## 手動でキャッシュクリア
`var/cache/`配下とかにキャッシュがあるので、手動で削除する。
“`shell
$ rm -Rf ./var/cache/*
“`## composerのautoloaderを修正
“`shell
$ composer dump-autoload
$ composer install –optimize-autoloader
“`