- 0.1. Kali Linux2022.1 でハッキングラボをつくってみる10 ウェブアプリハッキング3 bee-boxの導入とPHPコードインジェクション攻撃
- 0.2. namespaceってなんやねん
- 0.3. 【PHP】echoとprintの違い。シングルクォーテーション ‘ とダブルクォーテーション “の違い。
- 0.4. [Laravel6] Blade構文を素のPHPと比較して理解する
- 0.5. 【PHPStan】 “no value type specified in iterable type array”の解決方法
- 0.6. [cURL] PHPにてAWSから外部へPOSTする
- 0.7. 【PHP】ファイルのアップロード方法
- 0.8. 【PHP】fgetcsv()関数でCSVを読み取る方法
- 0.9. 【PHP】fopen()関数とfgets()関数を使い、ファイルを開いて取得する流れ
- 0.10. 通貨強弱チャートの見方考え方
- 0.11. Laravelでの自動テスト備忘①
- 0.12. 【Laravel】whereHasとwithの違い
- 0.13. 【PHP】nullableな型
- 0.14. 【PHP】4種類のnull判定
- 0.15. [Laravel6] よくあるエラー4つ
- 0.16. PG見聞録 ~PHP編 正規表現その1~
- 1. 正規表現
Kali Linux2022.1 でハッキングラボをつくってみる10 ウェブアプリハッキング3 bee-boxの導入とPHPコードインジェクション攻撃
# はじめに
「ハッキング・ラボのつくりかた」p.624-631を参考に、KaliLinux2022.1で検証してみた記事です。:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::# BWAPP bee-boxとは
同書p.624より(URLはリンク切れのため改変)
>bWAPP(buggy web application)は、主にWebアプリのセキュリティを学習するためのWebアプリです。100を越える脆弱異性を備えており、網羅的にWebアプリのハッキングを学習できます。
OWASP top10プロジェクト(https://www.owasp.org/ )の脆弱性についてもカバーされています。>bWAPP bee-box(bee-boxと略す)は、bWAPPがインストールされているUbun
namespaceってなんやねん
# ざっくり言うと
中身は全然違うけど名前が同じファイルは同じディレクトリに複数枚共存することはできない(めっちゃ当たり前やんけ)。
PHP(やLaravel)でも同様に、中身が別で名前が同じメソッドやプロパティは同じファイル内に共存することはできない。
これを解決するために使うのが「名前空間namespace」やで。
# 前提や問題点
例えば2人の「潤」という名前の人が同じ部屋にいたとする。
そこにスタッフが入ってきて「潤さん、出番です!」と言った。
当人も周りの人もどっちの「潤」さんが呼ばれたのか、これだけだと全く分からない状態が起きる(目線とかは一旦抜きにして)。
# 区別できるようにしたらええやん
これを解決するために、同じ部屋にいる2人の潤さんに苗字を導入しようと番組ディレクターが言い出す。
イケメンな方の潤さんには「松本」という苗字を与えて、面白い方の潤さんには「名倉」という苗字を与えよう!
これで番組スタッフも「松本潤さん、出番です!」と言えば、どっちの「潤」が呼ばれたかすぐに分かるし、石原さとみとの大事なキスシーンなのに面白い方の潤がキスしなくて済
【PHP】echoとprintの違い。シングルクォーテーション ‘ とダブルクォーテーション “の違い。
# 1 調査
—
echoやprintは一番初めに覚える命令だが、違いが判らずどちらでも問題ないと思っていた。シングルクォーテーションとダブルクォーテーションについても同じである。公式マニュアルで調べると、echo、printの解説は見つかったが、シングルクォーテーション、ダブルクォーテーションは見つからなかった。探し方をご存じの方は、教えて頂けたらと思います。
[echo](https://www.php.net/manual/ja/function.echo.php)
[print](https://www.php.net/manual/ja/function.print.php)#2 echoとprintについて
—
公式マニュアルによると、
– echo: 1 つ以上の文字列を出力する
– print: 文字列を出力する
となっていた。更に例文があり違いを理解できた。例文を少し変更し出力してみる。
~~~echo1.php
~~~
~
[Laravel6] Blade構文を素のPHPと比較して理解する
## 変数の出力
⚫ php“`bash
または = $test; ?>
“`⚫ blade.php
“`bash
{{ $test }}/*
{{ }}で囲む事で出力出来ます。
これによりXSSの対策も同時に行ってくれます
*/
“`## foreach の場合
※$array = [ ‘ hello ‘ , ‘ world ‘ , ‘ hoge ‘] のような配列が定義されているものとします。⚫ php
“`bash
echo $value;
“`⚫ blade.php
“`bash
@foreach ( $array as $value )
{{ $value }}
@endforeach
“`– 条件の書き方だけ一緒
## if 文
⚫ php“`bash
echo
【PHPStan】 “no value type specified in iterable type array”の解決方法
やりたいこと
—————
“no value type specified in iterable type array”を解消したいエラー内容・原因
—————
エラーの原因は2つ
* getInputsの$argvに代入されている配列の構成要素が明示されていない
* 戻り値の配列の構成要素が明示されていない“`php:コード
const SEPARATE_EACH_2 = 2;function getInputs(array $argv): array
{
$inputs = array_slice($argv, 1);
return array_chunk($inputs, SEPARATE_EACH_2);
}$inputs = getInputs([‘test’, 10, 50, 80, 100]);
“`
“`phpstan:結果
5 Function getInputs() has parameter $argv with no value type specified in
[cURL] PHPにてAWSから外部へPOSTする
CRMシステムのHubSpot導入にあたり社内システムで活用しているAWSから売上実績を定期的にHubSpotへAPIで投げる案件があり、Node.jsで仕組みを作った矢先、導入環境に合わず(?)phpで書くことに。phpでバックエンドと思ったものの案外すっきり出来たので、忘れないうちに~~メモ書き~~投稿。
# MySQLへの接続
mysqlに接続。そして取ってきたデータをAPI用の配列にプッシュ。HubSpotのAPIは10件/回の上限のため10件に達したらAPIで投げるようにする。
“`PHP:php
connect_error) {
echo $cn252->connect_error;
exit();
} else {
$cn252->set_charset(“utf8”);
}$sql = “SE
【PHP】ファイルのアップロード方法
PHPを学習中です。
ファイルのアップロード方法について、備忘録として残します。### 1. 【HTML側での処理】データ送信フォームを作成する
“`php:form.php
HTML内でのPHP処理
“`上記コードを記述すると、このように表示されます。
![スクリーンショット 2022-05-27 16.04.43.png](https:/
【PHP】fgetcsv()関数でCSVを読み取る方法
PHP7技術者認定初級試験に向けて学習中の身です。
備忘録として残します。### 1. csvファイルを作成
“`php:sample.csv
1,”りんご,バナナ”,フルーツ
2,オレンジ,フルーツ
“`fgetcsvを使えば、こうしたCSVのデータを配列として読み込むことができます。
まずは1行だけ読み込む方法から。
読み込んだ値をvar_dump関数で出力します。### 2. newfile.phpファイルを作成
“`php:newfile.php
“`### 3. 実行結果(コンソール)
“`
array(3) {
[0]=>
string(1) “1”
[1]=>
string(19) “りんご,バナナ”
[2]=>
string(12) “フルーツ”
}
“`
1行目のデータがカンマ区切りで配列として出力されました。
でも1行目の
【PHP】fopen()関数とfgets()関数を使い、ファイルを開いて取得する流れ
PHP7技術者認定初級試験に向けて学習中の身です。
備忘録として残します。### 1. txtファイルを作成
“`php:test.txt
===== ===== ===== ===== =====
これはテスト用のテキストファイルです
===== ===== ===== ===== =====
“`### 2. open.phpファイルを作成
“`php:open.php
“`### 3. 実行結果
“`
===== ===== ===== ===== =====これはテスト用のテキストファイルです
===== ===== ===== ===== =====
“`fopen(“test.txt”, “r”);
この部分は、第一引数にファイル名、第二引数にモードを記載しています。
通貨強弱チャートの見方考え方
# 通貨強弱チャートについてよく質問されるので回答のメモ
自称世界一使いやすい通貨強弱確認ツールを開発しています。
https://fx-labo.app/strength/?t=todayよくtwitterなどで質問をもらうので回答用にメモを残します。
## Question
通貨強弱の計算式は?
単位は?
起点を変えると全然異なるグラフになるのはなぜ?—
## Answer
計算式は長くなるので割愛
起点となるある時刻からの相対的な変化率です。
移動平均や取引量は一切考慮していない起点の価格とその時点の価格だけの比較です足し合わせるといつでもゼロになります。
相対的なものなので単位はありません。## 考え方
ある起点のすべてのペアの値を0として
起点時を
“`
ドル円 110円
ユーロ円 120円
ユーロドル 1.00ドル
“`
:::
として次のタイミングで
“`
ドル円 100円
ユーロ円 130円
ユーロドル 1.10ドル
“`となっていたとしたら
“`
ドル円だけ見ると円高→円強くなった
ユーロ円だけ見ると→円弱くなった
ユーロドル
Laravelでの自動テスト備忘①
# 基本の考え方
命名規則とアノテーション– テストクラスのファイル名は Test.php で終わる。
– メソッド名は test で始めるか、そうでない場合は @test アノテーションを DocComment 内に記述する。
– テストメソッドの DocComment 内に @covers アノテーションを書くと、テスト対象のメソッドを明示的に指定することができる。“`
*/
class SomeClassTest
{
/**
* @test
* @covers ::someMethod
*/
public function SomeMethodが正しく実行できること()
“`全体を実行する
“`
# php artisan test
“`
ユニットテストまたはフィーチャーテストのみを実行する“`
# php artisan test –testsuite=Unit
“`
(フィーチャーテストの場合は Unit の代わりに Feature を記述する)特定のテストクラスのみを実行する
“`
#
【Laravel】whereHasとwithの違い
## 環境
Laravel v9.5.1 (PHP v8.1.3)## with
“`eager load“`でN+1問題が解消される。
“`php
$users = User::with(‘post’)->get();foreach ($users as $user) {
echo $user->posts;
}
“`“`
select * from users
select * from posts where id in (1, 2, 3, 4, 5, …)
“`https://readouble.com/laravel/9.x/ja/eloquent-relationships.html
## whereHas
リレーション先の条件でフィルタリングした結果を取得。“`php
use Illuminate\Database\Eloquent\Builder;$users = User::whereHas(‘posts’, function (Builder $query) {
$query->where(‘users.or
【PHP】nullableな型
## 環境
## nullableな型
型宣言の前に“`?“`をつけると、指定した型か“`null“`が許容される。
“`php
public static function createPostBy(
int $userId,
string $type,
string $content,
?DateTime $deletedAt
)
{
self::create([
…
]);
}
“`“`?“`をつけずに引数に“`null“`を入れていると下記のようにエラーが出る。
“`
Argument #2 ($deletedAt) must be of type int, null given, called in
“`## 参考
https://www.php.net/manual/ja/migration71.new-features.php
【PHP】4種類のnull判定
## 環境
Laravel v9.5.1 (PHP v8.1.3)## null判定
### is_null
“`php
if (is_null($hoge)) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### empty
“`php
if (empty($hoge)) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### ==
“`php
if ($hoge == null ) {
echo ‘nullだよ’;
}=> “nullだよ”
“`### ===
値と型が完全に一致しているか判定できる。
“`php
if ($hoge === null ) {
echo ‘nullだよ’;
}=> “nullだよ”
“`## 参考
https://wemo.tech/464
[Laravel6] よくあるエラー4つ
## 注意!
以下の内容は必ずしも「このエラーが出たら、これをすれば解決します!」ということを保証しているわけではありません。
あくまで1つの参考としてお読みください。## SQLエラー「〇〇カラムはnullを許しません!」
– nullってことはつまり、値が入っていないってこと(前提を確認することは大事)
– まず `dd($request)` でDB通信の内容を確認する。
– そしたら案の定、input の name属性の指定がタイポしていた、みたいなことがよくある## 404
Routingを見直す
1. `php artisan route:list` でroutingが正常に設定されているかを確認
1. Apache設定の見直し
1. 大体Documentroot
? そもそものURL指定は間違ってない? `localhost/フォルダ名/public/routing` だよ!## バリデーション実装時の403エラー
– Requestのauthorizeメソッドがfalseになってるからだと思うよ
– fals
PG見聞録 ~PHP編 正規表現その1~
個人的に少し苦手意識のある正規表現についておさらいしたので書いておきます。
正規表現
予め定められたパターンを指定して文字列を検索するための機能です。
そのパターンを正規表現パターン、パターンに当てはまることをマッチといいます。
\とか[]とか^とか*とかいろんな記号に意味があり、それらを組み合わせることで文字列を検索します。
ちなみにURLを表す正規表現パターンはhttp(s)?://([\w-]+\.)+[\w-]+(/[\w ./?%&=-]*)?
です。わけわからんすね。これを読み解いていくと
(s)? は「sが0~1回登場する」という意味でhttpもしくはhttpsということですね
([\w-]+\.)+[\w-]+は「英数字、アンダースコア、ハイフンを含み、途中に.が入る文字列」という意味。
\wは単語文字、数字、アンダースコアに一致するパターンです。
(/[\w ./?%&=-]*)?は「英数字、アンダースコア、ハイフンを含み、任意の記号(?,%,&,-など)を
Laravel Larastan のインストール
## Larastan
https://github.com/nunomaduro/larastan
Larastanは静的解析ツールPHPStanのLaravel用のラッパーライブラリです。
## 環境
– PHP: 8.1.5
– Laravel: 9.12.2
– Larastan: 2.1.6## インストール
“`shell-session
$ composer require nunomaduro/larastan –dev
“`設定ファイルを作成します。
“`shell-session
$ touch phpstan.neon
“`“`phpstan.neon
includes:
– ./vendor/nunomaduro/larastan/extension.neonparameters:
paths:
– app
level: 6
“`## Larastan 実行
“`shell-session
$ ./vendor/bin/phpstan analyse
“`## GitHub Action
PHPの設定について
## はじめに
PHPの設定について、記事にしてみました。
## 設定の確認
設定は、phpinfoメソッド([詳細](https://www.php.net/manual/ja/function.phpinfo.php))で確認できます。
phpinfoメソッドはWebサーバー上で実行された場合はHTMLを出力し、CLIで実行された場合はプレーンテキストを出力するため、今回はWebサーバーを起動して設定の確認を行います。### 1. Webサーバーの起動
“`php
php -S localhost:80
“`### 2. 実行ファイルの作成
まず、Webサーバーを起動したフォルダにindex.phpを作成します。
次にindex.phpにphpinfoメソッドを記載します。“`php
[Laravel6] ざっくりSeederを使う
### ターミナル
“`php
php artisan make:seeder 〇〇
“`– database\seeds\〇〇が作成される
### Seeds
“`php
public function run()
{
DB::table(‘users’)->insert([
‘name’ => Str::random(10),
‘email’ => Str::random(10) . ‘@gmail.com’,
‘password’ => Hash::make(‘password’),
]);
}
“`### DatebaseSeeder
“`php
public function run()
{
$this->call(UsersTableSeeder::class);
}
“`– DBSeederは必ず存在している+作成したSeederが最初はコメントアウトされている
– ここから個々のS
CakePHPでヘルパーをコントローラで使う
# 意外と見つけるのが大変だった。
システム全体をSPAへの置き換え時にありがちな、ヘルパーの処理をコントローラに移行したいという状況が発生したのでメモ
(追記) コメントがあり、レジストリを用いる方法の方が良さそうなので、記事の内容を変えました。
MyHelperを利用する場合。
“`php
use Cake\View\View;
use Cake\View\HelperRegistry;—
// ヘルパーを使うおまじない
$HelperRegistry = new HelperRegistry(new View());
$this->MyHelper = $HelperRegistry->load(‘My’);
$fuga = $this->MyHelper->hoge()
“`直接呼び出す方法。
“`php
use Cake\View\View;
use App\View\Helper\MyHelper;—
// ヘルパーを使うおまじない
$this->MyHelper = new MyHelper(new View());
$fug