- 1. セキュリティ問題と解決方法-その1
- 2. 「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
- 3. telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
- 4. PHP7に PDF Haru拡張をインストール
- 5. Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
- 6. WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
- 7. 戻り値returnは何のためにあるの?
- 8. Flatpickrを申込フォームに実装
- 9. PHPのバージョン確認をするコード
- 10. 【PHP】PHPファウンデーションは新たなPHP開発者を募集しているぞ
- 11. zlibで圧縮されたswfファイル(CWS)を非圧縮のswfファイル(FWS)に変換するPHPコード
- 12. PHPerが初めてiOSアプリ開発をした話
- 13. PHPでアクセス元のIPを取得する方法
- 14. Laravel勉強日記
- 15. PHPで配列の末尾の要素を取得する
- 16. WP_List_Tableでデータベースからページネーションとソート【pagination】
- 17. Laravelでのループ処理5選
- 18. Laravel を使用していて Docker コンテナの起動に失敗する場合に composer install をするには docker-compose run を実行する
- 19. PHP7系で readonly なプロパティを擬似的に再現するサンプルコード
- 20. Windowsのローカル環境でLaravelのGoogleログインを実装してみた話
セキュリティ問題と解決方法-その1
# この記事を書いた理由
コーディングテストでセキュリティに関する問題が出題されて、改めてどういったものなのか調べ、対処法も含めて備忘録として残します。# 目次
1. CSRFとは
2. PHP(Laravel)で防止する方法は?## CSRFとは?
クロスサイトリクエストフォージェリと言い、
Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことを指します。
掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまいます。攻撃者が攻撃用にサイトを作成しユーザーがアクセスするように誘導し、アクセスすると不正なリクエストが攻撃者が対象にしているサーバーに送られます。
意図していないリクエストを処理するため、ユーザーの意図とは違う処理が行われます。不正な書き込みや、大量の書き込みを使用したDos攻撃などが当てはまります。
※Dos攻撃とDDos攻撃があるので違いを簡単に記載します
・DoS攻撃とは、1台のコンピューターから攻撃をしてくるサイバー攻撃です。
・DDoS攻撃は、複数
「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
# 前置き
https://qiita.com/ockeghem/items/0f3b09a0f413bdd39bd5まだ問題を見てない方は上にあるのでどうぞ
# 本題
### フォームの確認
多分ツールを使えばわかることなのでソースを確認してログイン画面以外ではprepareメソッドを使ってることを確認しました。### SQLの解析
・アカウント作成
newuser.phpでアカウントを作成すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/43cd7311-fdd7-e697-c634-6bc7f893a988.png)
とシンプルな表示。ですがここで同一メルアドでもう一度作成すると![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/45d6aecc-9759-a273-28e3-3177c5669866.png)
となりテーブル名が判明。多分UN
telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
## LaravelにTelescopeを導入したい。
https://laravel.com/docs/9.x/telescope
基本的にこの通りにやればいいのだが、記載されていないエラーがでた。## 手順
いつも通りに、/var/www に移動。
“`PHP:Laravel
composer require laravel/telescope –dev
“`
“`PHP:Laravel
php artisan telescope:install
“`
// ここでエラーでる
ERROR There are no commands defined in the “telescope” namespace.ので
config/app.phpの’providersに下記を追加“`PHP:config/app.php
‘providers’ => [
// ・・・
Laravel\Telescope\TelescopeServiceProvider::class,
]
“`その後、再度
“`PHP:Laravel
php artisan telesc
PHP7に PDF Haru拡張をインストール
pecl で PDF Haru拡張機能を PHP7 にインストールしようとすると、PHPバージョンが対応外であるため失敗します。
“`shell:PHP Extention haru Install
>pecl install haru
pecl/haru requires PHP (version >= 5.1.3, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.4.15 No valid packages found install failed ``` そこで libharu と PHP7に対応した haru拡張をソースからビルドしてインストールします。 ## 必須ライブラリ/プログラムのインストール ソース取得には wget, git、libharu ビルドには cmake, zlib, libpgn, haru拡張には php-devel,libtool が必要です。 ```shell:Install requisite modules and programs >apt
Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
# はじめに
うわっ…私の記事、タイトル長すぎ…?
と思わなくもなかったのですが、↓の続編ということがわかりやすいようにしました。https://qiita.com/fsd-yamagen/items/fa819d9c55a76ff0ce03
前回、LaravelのSocialiteを使ってGoogleのソーシャルログインが実装できたので、今回はログアウト→別アカウントでログインという処理を実装したら、思ったより苦労したという備忘録です。
環境やソースコードは前回のものを使っています。
# ログアウト処理の実装
まずは以下のように実装してみました。**resources\views\welcome.blade.php**
好きな場所に以下のログアウト用リンクを設置“`PHP
@auth
logout
@endauth
“`
**routes\web.php**
末尾に以下を追記“`PHP
Route::get(‘/logout’, [GoogleLoginController::class,
WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
WP本体をいぢる必要はなく、 生PHP (?) , 生Javascript (?) だけで書いた以下のPHPをWP直下におくだけです。
以下のPHPファイル(xxx.php)を、WP直下におきます。
https:// site //xxx.php?yyyyyy=zzzzzzz のショートカットリンク を作っておけば、すぐにログインできます。
セキュリティ上の問題はありますが、 xxx, yyy, zzz を超長く、複雑にしておけば、多少はマシかと。
自己責任でお願いします。メリットは不要になったら、このPHPファイルを削除するだけでよく、WP本体ファイルには手を入れないでよいということです。
“`php
戻り値returnは何のためにあるの?
# 初学者向け|戻り値returnについて
whileを使ったループ処理を書くとき、必ず出てくるのが戻り値”return”。
リターンは **「関数が行った仕事の結果」** を教えてくれるものです。
と言っても意味わかんないですよね。
# 3つの目的
設計にもよりますが、平たく言えば、次の目的で使われることが多いです。#### 1、答えを教えてくれる
例:「2 + 3は何?」と聞いた時の「5」という答え。#### 2、情報を教えてくれる
例:「今日の天気は?」と聞いた時の「晴れ」という答え。#### 3、うまくいったか、ダメだったかを教えてくれる
例:ゲームで宝箱を開けるとき、「鍵が必要だよ」というメッセージが表示される場合。これは「ダメだった」という結果の一種です。いずれも、 **答えを表示してくれないと何もわかりませんよね。**
# まとめ
要するに、関数の戻り値は、私たちが関数に頼んだ仕事の結果や答えを教えてくれるものなのです。
Flatpickrを申込フォームに実装
WordPressのお申込みフォームでカレンダー機能を実装したのでメモします。
## やりたいこと
* フォームはカレンダー形式で入力
* お申し込みは希望日の3日前まで(申込後3日まで選択不可)
* 日、祝日も選択不可
* 臨時休業日を任意で選択不可に追加できる何か良いライブラリはないものかと探していたところ「Flatpickr」がイイ感じだったので使ってみました。
jQuery UIの選択肢もありましたが、コードをみたら何かイマイチな感じ。
サポートも終わりだそうで。
スッキリした書き方とデザインも良かったし、軽いということで決めました。CDNではなくダウンロードしてローカル環境で使用です。
## インストールと準備
下記サイトよりダウンロードしました。
https://flatpickr.js.org/plugins/サンプルで作ったフォームにjsとcssを組み込みます。
デザインも色々用意されてましたが、どんなものにも合いそうなlightテーマを選択。
ファイルパスはdatepickerディレクトリ作って、全部放り込みました。“`index.html
PHPのバージョン確認をするコード
PHPのバージョン確認をするコードを2種類解説します。
## PHPで確認する場合
PHPスクリプト内で phpversion() 関数を使用して、PHPのバージョン情報を取得できます。
“`php
“`## コマンドラインで確認する場合
コマンドラインで実行する場合には、以下のようにコマンドを使用できます。
“`shell
php -v
“`## PHPのお役立ち情報
https://wagtechblog.com/programing/php-school
https://wagtechblog.com/programing/php-book
【PHP】PHPファウンデーションは新たなPHP開発者を募集しているぞ
PHPで開発する人ではなく、PHPを開発する人を募集しています。
PHPは2022年以降、ボランティアベースではなく[きちんと給料を払ってPHP本体の開発を行う](https://qiita.com/rana_kualu/items/eaf97694f25a62f93a7e)という体制になっています。
[2022年5月には6名のコア開発者](https://qiita.com/rana_kualu/items/0479edbd936447572c3b)が雇用され、安定した立場で開発することができるようになりました。
もちろんボランティア参加者も変わらずたくさんいますし、[RFC](https://wiki.php.net/rfc)への投票権も一人一票でありコア開発者だから権限が強いとかいうこともありません。さて今回、さらに新たな開発者を募集することが決まりました。
以下は2023/09/06の募集エントリ、[We Are Looking for Developers to Join the PHP Foundation](https://thephp.foundation/bl
zlibで圧縮されたswfファイル(CWS)を非圧縮のswfファイル(FWS)に変換するPHPコード
Flashのswfファイルは本体データ部分が圧縮されている場合があるようです。
それを非圧縮のファイルに変換するコードです。swfを再生表示するJSのライブラリがいくつかありますが、ものによっては圧縮されていると再生できないライブラリがあったので調べて対応しました。
他の言語や圧縮形式でもほぼ同様の処理で対応できると思います。“`PHP
PHPerが初めてiOSアプリ開発をした話
普段はLaravel、Vue.jsで開発しているPHPerですが、SwiftでiOSアプリを作ることになりました。
色々と苦労しましたが、意外となんとかなったので、メモ程度に残します。
# 目次
[まず何から始めればいいの…?](#まず何から始めればいいの)
[開発環境の準備](#開発環境の準備)
[ベース構築](#ベース構築)
[開発開始](#開発開始)
[まとめ](#まとめ)## まず何から始めればいいの…?
モバイルアプリについて何もしらなかったので、ここからスタートです。。
少し調べると、ネイティブとクロスプラットフォームがあり、クロスプラットフォームはiOSでもAndroid両方対応している。
### ネイティブ
Swift
### クロスプラットフォーム
Flutter(Dart) 、React Native(JavaScript)
### どの言語にする?
今回の要件として、装置とBluetooth接続する必要がある。
クロスプラットフォームだと、iOSとAndroid両方でBluetooth通信が上手くいく気が全くせず、Swiftを選定。
### フレー
PHPでアクセス元のIPを取得する方法
注意。
PHPで`$_SERVER[‘REMOTE_ADDR’]`を使ってアクセス元の IP アドレスを取得している人は多いでしょう。
これは自宅でPHPサーバーを運用している場合には有効ですが、VPSやホスティングサービスを使用している場合は、これは使えません。
なぜなら、サーバーはアクセス元ではなく、ユーザーのIPアドレスを返すからです。
つまり、サーバーを正しく運用することができないのです。
そこで、解決策を紹介しよう。
`REMOTE_ADDR`の代わりに`$_SERVER[‘HTTP_X_FORWARDED_FOR’]`を試してみてください。
これはアクセス元のIPアドレスになります。
これはNode.jsでも使えますので、覚えておいてください。
Laravel勉強日記
# laravel勉強日記
#### シーディングを利用してデータを一括挿入
シーダーを作成するには以下のコマンド
“`
sail artisan make:seeder TweetsSeeder
“`
database/seeder にTweetSeederクラスが作成される## DBにデータが挿入される流れ
#### ① database/seederに作成されたデータを挿入するためのファイルを作成する。
“`
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;class TweetsSeeder extends Seeder
{
public function run()
{
DB::table(‘tweets’)->insert([
‘content’ =
PHPで配列の末尾の要素を取得する
PHPで配列の要素を取得する方法を3パターン紹介します。
1. array_key_last()
2. count()とインデクサを使用
3. end()上記の3パターンが使われる可能性が高いですが、最新のPHPバージョンではarray_key_last()を使うことがベターです。
使用例は以下の記事にまとめています。
https://hishikiryu.com/php-get-last-array-value/
WP_List_Tableでデータベースからページネーションとソート【pagination】
DBから取得するサンプルがなかったのでメモ
# データベースからページネーションとソート
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/2ce661a5-5b89-98a7-a4d5-2a518944534a.gif)
“`php:wp-content/plugins/my-list-table.php
Laravelでのループ処理5選
備忘録として残します。
## 前提
例として、
ユーザーモデルからデータを全取得したものをループ処理していく。
“`php
$users = App\Models\User::all();
“`### ①foreachメソッドでループ処理
“`php
foreach ($users as $user) {
echo $user->name . “\n”;
}
“`
なんだかんだこればっかり使ってるコードになってる。
https://readouble.com/laravel/8.x/ja/collections.html
コレクションクラスでも配列と同様に扱える。### ②Collectionのeachメソッド
“`php
$users->each(function ($user) {
echo $user->name . “\n”;
});
“`
https://readouble.com/laravel/8.x/ja/collections.html#method-each
Colectionインスタンスを直感的にループできる。
途中で処理
Laravel を使用していて Docker コンテナの起動に失敗する場合に composer install をするには docker-compose run を実行する
# TL;DR
コンテナを `docker-compose up` で起動せずに特定のコマンドを実行するには `docker exec` ではなく `docker-compose run
` を実行する。 # 発生したエラー
Docker 内で Laravel を使用していたところ、Docker コンテナの起動に失敗する現象が発生しました。
“`bash
$ docker-compose up
# 中略
my_container |
my_container | Warning: require(/var/www/my-app/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/my-app/artisan on line 18
my_container |
my_container | Fatal error: require(): Failed opening required ‘/var/www/my-
PHP7系で readonly なプロパティを擬似的に再現するサンプルコード
新人研修用途で書きました
# まえがき
PHP8系には、一度値を格納したら以降上書き出来ないという素晴らしい readonly なプロパティが存在します
ただPHP7系には存在しないため、何とか擬似的にでも再現したいと言うのが今回のお話ですさすがに readonly プロパティと完全に同じ挙動を再現しようとすると非常に大変なので、「外部からプロパティを上書き不可、読み込みのみ可能」という点だけ再現します
# サンプルコード1
権限を管理するバリューオブジェクトクラス
ログインユーザーがどの権限を保持しているかを判定する責任を持つクラスです“`php
use InvalidArgumentException;
use OutOfBoundsException;/**
* 権限クラス
*
* @property-read int $value 格納されたミュータブルな値
* @property-read bool $isAdmin 社内管理者かどうか
* @property-read bool $isClientAdmin クライアント管理者かどうか
*
Windowsのローカル環境でLaravelのGoogleログインを実装してみた話
# はじめに
最近はかなりのサイトで採用されているソーシャルログインですが、自分で実装したことがなかったので、調査のために環境構築から動作確認までやってみた備忘録です。
キャプチャを残してないので文字ばかりなのはご容赦ください。
バージョンは2023年9月当時のものとなります。
コマンドの実行は基本的にコマンドプロンプトでやっていますが、PowerShellでも問題ないはずです。
# 環境構築
## PHP
1. [PHP For Windows: Binaries and sources Releases](https://windows.php.net/download/)から「PHP 8.2 (8.2.9)>VS16 x64 Thread Safe (2023-Aug-01 13:08:42)>Zip」をダウンロード
2. 「C:\php」に解凍
3. 環境変数の「Path」に`C:\php`を追加
4. `php -v`を実行して`PHP 8.2.9`と表示されたらOK
## Composer
1. [Composer](https://getcomposer.org/down