- 1. 正则写配置文件常见的漏洞
- 2. PHP ハッシュ化された値と通常の文字列を比較する
- 3. Ubuntu 20.04 oci8 for phpインストールエラーの対処
- 4. MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
- 5. PHP ~ちょっと忘れがちな基礎文法集~
- 6. 環境構築
- 7. 【PHP8.0】PHPでアトリビュート/アノテーション/デコレータが書けるようになる
- 8. wordpressの管理と公開で異なるドメインにしたらWP REST APIがエラーになる場合の対処
- 9. Laradock環境構築
- 10. phpberewでバージョン管理する
- 11. PHP 値のハッシュ化を行う
- 12. PHPでの文字列の連結について(びっくり)
- 13. Compassがよかった話
- 14. 開放閉鎖の原則
- 15. php で、KVS をいろいろ比較してみた。( apc vs memcached vs file vs Oracle )
- 16. プロジェクトのPHPライブラリの脆弱性をチェックするGithub Actionを作りました
- 17. PHPオブジェクト指向基礎まとめ(2)
- 18. PHPオブジェクト指向基礎まとめ(1)
- 19. PHPでの数字系の関数
- 20. PHPビルトイン関数~配列に関する関数~
正则写配置文件常见的漏洞
之前ATEAM发了《这是一篇“不一样”的真实渗透测试案例分析》文章,其中dz的getshell的部份利用的就是对于配置文件正则处理不当,然后P牛的博客也写了一篇 [经典写配置漏洞与几种变形](https://www.leavesongs.com/PENETRATION/thinking-about-config-file-arbitrary-write.html)
本文总结下在正则下写文件常见的错误。
## 无单行/s+贪婪模式
“`php
PHP ハッシュ化された値と通常の文字列を比較する
# 目的
– 文字列をハッシュ化する方法はすでにまとめた為、ハッシュ化された値と平文で入力された値がマッチするかの処理方法をまとめる
– ※ハッシュ化の方法について知りたい方はこちら→[PHP 値のハッシュ化を行う](https://qiita.com/miriwo/items/9f75d9544acbc40bb0a7)# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbr
Ubuntu 20.04 oci8 for phpインストールエラーの対処
##はじめに
Ubuntu 18.04⇒Ubuntu 20.04のバージョンアップに伴い、phpが7.2⇒7.4にバージョンアップされたので、phpにoci8の設定をしたときに発生したときの対処メモ##エラー内容
https://gist.github.com/Yukibashiri/cebaeaccbe531665a5704b1b34a3498e
を参考に、インストールをすすめたが、“`
pecl install oci8
“`
で以下のエラーが発生“`
In file included from /tmp/pear/temp/oci8/oci8.c:49:
/tmp/pear/temp/oci8/php_oci8_int.h:58:10: fatal error: oci.h: No such file or directory
58 | #include
| ^~~~~~~
compilation terminated.
make: *** [Makefile:194: oci8.lo] Error 1
ERR
MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
## はじめに
`PHP`の勉強しているときに`phpMyAdmin`で管理してる`MySQL`のデータベースには`AUTO_INCREMENT`という便利機能があることを知った。
早速、やってみよう!!## AUTO_INCREMENTとは
簡単に言えば、自動割り当て。
カラムでの値を指定しなければ`MySQL`が自動で整数を割り当ててくれる。
1,2しか入ってないカラムなら`AUTO_INCREMENT`では3が割り当てられる。## MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
### データベース初期設定
まずは`phpMyAdmin`で新規データベース、テーブルの作成
PHP ~ちょっと忘れがちな基礎文法集~# 概要
ちょっと忘れがちな基礎文法をまとめました!
随時、更新していきます。## ファイルの初めに書くやつ
“`sample1.php
が必要?>
“`
“`sample2.php
は必要ない!ルールです。“`
## 文字列に変数を埋め込む時
文字列に変数を埋め込む時、「’ ‘」と「” “」とでは埋め込み方が違う!#### sample1.php「’ ‘」の場合 : 「.」ドットを変数の前につける
“`sample1.php
環境構築
#リポジトリの追加
以下の4つの[リポジトリ](https://wa3.i-3-i.info/word15664.html)をインストールする
(1)epel リポジトリ
“`terminal
[root@localhost ~]# yum -y install epel-release
“`
-> CentOS 標準のリポジトリでは提供されていないパッケージを、yum コマンドでインストールすることを可能にするリポジトリ
-> つまり「yum install」を使えるようにするために必要(2)remi リポジトリ
“`terminal
[root@localhost ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
“`
->Remiレポジトリは様々なバージョンのphpのパッケージを配布しているレポジトリ
->PHPのモジュールのインストールに必要(3)iusリポジトリ
“`terminal
[root@localhost ~]# yum -y install
【PHP8.0】PHPでアトリビュート/アノテーション/デコレータが書けるようになる
[Attributes v2](https://wiki.php.net/rfc/attributes_v2)というRFCが投票中です。
投票期間は2020/05/04まで、投票者の2/3の賛成で受理されます。
2020/04/27時点では賛成48反対1で、ほぼ間違いなく可決されます。# Attributes v2
## Introduction
このRFCは、クラス/プロパティ/関数/メソッド/引数/定数の宣言に、構造化されたアトリビュートをメタデータとして記述できるようにする提案です。
アトリビュートは、コードの宣言に直接設定ディレクティブを埋め込むことで定義されます。同じような概念としてJavaの*Annotation*、C#/C++/Rust/Hackにおける*Attribute*、Python/Javascriptにおける*Decorator*が存在します。
これまで、PHPではこのようなメタデータとしては非構造的であるdoc-commentsしか存在しませんでした。
しかしdoc-commentsはただの文字列であり、言語によって解釈されることはありません。
wordpressの管理と公開で異なるドメインにしたらWP REST APIがエラーになる場合の対処
– 現象
– wordpressのwordpressアドレスとサイトアドレスで異なるドメインにしていたら、
投稿画面でエラーになる参考: wordpressの閲覧URLと管理URLで異なるホストを設定
https://qiita.com/backgroundcolor/items/fb7b5ce8cba9794c460f– 原因
– wordpress ver.5の投稿画面は [WP REST API](https://ja.wp-api.org/) を利用している
– なぜだか APIのアドレスが 「閲覧URL(サイトアドレス)/wp-json/wp/〜」 なので、投稿画面のドメインと異なるため、認証が通らずエラーとなる
– 対応
– function.php に、管理画面操作時は WP REST API のドメインを置換する処理を入れる“`php:function.php
/* 管理画面での APIのドメインを変更 */
add_filter( ‘rest_url’, ‘rest_url_replace’ );
function rest_ur
Laradock環境構築
Mac OS X Catalina 10.15.4
初めて頑張ってLaradockで環境構築していきたいと思います。
おかしなところがありましたらぜひ指摘してください。##Laradockをクローン
まずは専用のディレクトリ作成して移動します。
“`
$ mkdir laratest
“`“`
$ cd laratest
“`そこでgit clone。
“`
$ git clone https://github.com/LaraDock/laradock.git
“`##LaraDockの.envファイル作成
そしたら“`laradock“`というファルが作成されているはずなので、そこに移動します。
“`
$ cd laradock
“`
その中にある“`env-example“`ファイルを“`.env“`としてコピーします。“`
$ cp env-example .env
“`laraDockファイルの中はいろんなソフトがめっちゃ入ってます。
nginx, mysql, php, laravelだけなら特に“`.
phpberewでバージョン管理する
# phpもrubyみたいにバージョン管理したい
一番最初に触れた言語はphpでその時は環境構築までやってちょっとチュートリアルやって挫折したと言う経験が昔ありました。で、その時はローカルに思いっきりphpを落としてきて、色々ごちゃごちゃ設定したりしていたわけですが、rubyを勉強して使うようになってからrbenvの存在を知り、バージョン管理するツールがあることを知ったので、phpにもそう言うのないかと思ったら、phpbrewなるものがあることを教えてもらったので、インストールから、やっていきました。物凄い使い方を理解するのに時間がかかりました。以下は、そのエラーや何やらの対処を書いてあります。結論からいきたい方は、使い方の結論から読んでください。
## phpbrewのインストール
公式のgithubには、丁寧にインストール前に必要なものが指定されているので、こちらをまずやっていきます。
macには、2項目のみだったので、楽にできます。[Requirement](https://github.com/phpbrew/phpbrew/wiki/Requirement)
`
PHP 値のハッシュ化を行う
# 目的
– PHPにて任意の値のハッシュ化を行う方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いて導入 |– 上記環境にてL
PHPでの文字列の連結について(びっくり)
##この記事を書いた理由
現在、PHP教材を執筆していて初めて知ったことがあったので残しておこうと思います。##PHPでの文字列+変数の出力について
例えば、変数`$name`に`”yamada”`という文字列を代入して`Hello!yamada`という文字列を出力するケースを試します。“`php:sample.php
“`上記の`実行結果`を見ていただければわかると思いますが、
文字列+変数の出力の方法で一般的に知られているのは2つ目の“`php
Compassがよかった話
受託Webサイト制作で2ページ分のLPを制作するにあたり、Compassを使いました。
静的サイトの制作ならCompassで十分だと思い、記事に残しておきます。# 前提
## 案件
– 成果物:LP2ページ(PC版1ページ、SP版1ページ)
– 対応ブラウザ:最新ブラウザとIE11
– 納期:4営業日
– 備考
– SPのデザインは最初ない状態
– 動きはほぼない
– jsはほぼ書かない
– レスポンシブでない
– 後々運用していくにあたり修正しやすい様にしておく## 業務フロー
デザイン受取 → コーディング → ローカル確認 → zipなどで納品 → テストアップ## 開発環境
– MacOS mojave
– MAMP## 開発リソース
– template(php)
– css
– assets(font, image)## ビルド
cssのみsassでビルドしました。途中からCompassを導入。
phpは生で編集し、assetsは最適化したものを保存。## ディレクトリ構成(最終形)
“`
開放閉鎖の原則
##開放閉鎖の原則 (Open/closed principle)
拡張に対して開いて (open) いなければならず、
修正に対して閉じて (closed) いなければならない上記原則に従ったソフトウェアは、既存のソースコードを変更することなく、振る舞いを変更することができる
[wikipedia](https://ja.wikipedia.org/wiki/開放閉鎖の原則)
### ある日の会話
私「なんとなくしかわからない…。つまり、どういうこと?」夫「SOLID原則の中で、一番何言ってるのかわからない箇所かも」
夫「実際コードを書いて説明するよ」“`php:悪い例_コントローラー
class BadSampleController
{
public function BadSample()
{
$class = new Update(new DbConnection());//エンドユーザー
$class->updateUser($userName, $address);
php で、KVS をいろいろ比較してみた。( apc vs memcached vs file vs Oracle )
# やってみたこと
php でキャッシングをするにあたって、いろんな方式でのパフォーマンスをチェックしてみました。# エントリー
やってみたのは、次の4種類。
1. apc
php 内部のキャッシュ。再起動すると消えるし、複数のサーバーで共有もできないけど早い。2. memcached
KVS といえば。今回はローカルサーバー上の memcached サーバーに接続しています。
接続後の読み書き部分のみを計測しています。3. file
普通のファイル。/tmp/kvs/ というフォルダと、/dev/shm/kvs/ に、キー名称でファイルを作ってみました。
物理ディレクトリと、共有メモリのディレクトリです。
一回の読み書きで、ファイルのオープン、読み書き、クローズまでを行いました。4. Oralce
あて馬です。
ただでさえ遅いデータベース。さらにこれ以外が全部ローカルサーバーなのに、これだリモートという時点でさらに不利。
値は、VARCHAR2 の列に格納しています。read は、SELECT 文で。write は、MERGE で行いました。# 結果
そ
プロジェクトのPHPライブラリの脆弱性をチェックするGithub Actionを作りました
# はじめに
こんにちは[@glassmonekey](https://twitter.com/glassmonekey)です。PHPを書く機会が増えそうなので、以前作って放置していた[php-audit-action](https://qiita.com/glassmonkey/items/ef49c91d597e684a7ae7)をcomposer.lockから脆弱性情報があればissueを立てるactionにしてみました。この記事では、使い方や実装の紹介をします。
ソースコードなどは下記となります。バグ報告や要望などお待ちしております。よしよかったらStarください?
[ソースコード](https://github.com/glassmonkey/actions-php-audit)
[マーケットプレイス](https://github.com/marketplace/actions/php-audit-action)# 使い方
Github Actionの使い方そのものはこの記事では解説をしません。公式の[Getting started with GitHub Ac
PHPオブジェクト指向基礎まとめ(2)
『PHPオブジェクト指向基礎まとめ(1)』
https://qiita.com/imayasu/items/03bf73d1d844bef6a194
の続き# $thisについて
メソッドの中でインスタンスのプロパティやメソッドにアクセスしたい時には$thisという特殊な変数を使う。“`php
class Animal {
public $name;
public function hello() {
echo “私の名前は{$this->name}です”; //hello()の中でnameプロパティにアクセスしたい
}
}$cat = new Animal();
$cat->name = ‘MIKE’;
$cat->hello();
“`
# コンストラクタ
__construct()という記述をするとインスタンスを生成した時に自動でメソッドが呼ばれる。
コンストラクタには引数をとることができ、コンストラクタメソッドの中で$thisを用いてプロパティに値をセットすることができる。
※コンストラクタの記述はアンダーバー2つから始まることに注意“
PHPオブジェクト指向基礎まとめ(1)
# オブジェクト指向
**もの(オブジェクト)を中心にした考え方**
サイトやWEBサービスはユーザー、アイテム、グループなど1つ1つのものを組み合わせて出来上がっていると考えることができる。
この考え方によって、コードをユーザーに関するコード、商品に関するコード・・・という具合に役割を明確に分けてプログラムを作り上げることができる。
# クラスの定義
クラスとはオブジェクトの設計図のようなもの。
**class クラス名**という形で定義し、{}の中に定義したクラスの内容を書いていく。
クラス名は大文字から始まる。(Dog、Cat、Car、Menu・・・)“`php
class クラス名 { //クラス名は大文字から始まる。
//クラスの内容
}
“`
# インスタンス
クラスを元に作成された実体のこと。
**new インスタンス名()**という形で生成される。
**$変数名 = new クラス名();**
という感じに変数に代入し、クラスの外で生成する。“`php
class クラス名{
}
$変数名1 = new インスタンス名1(); //クラスの外で生成
$変
PHPでの数字系の関数
**学習記録**
#前提条件
・PHP version 5.4#数字系の関数
|関数|概要 |
|:————– |:——————|
| ceil() |切り上げ|
| floot() |切り捨て|
| round() |四捨五入|
| round(a, ‘○’) |aを小数○桁になるように四捨五入|
| mt_rand(a, b) |aからbのランダム整数値を返す|
| max(a, b, c,…) |()内の最大値を返す|
| min(a, b, c,…) |()内の最小値を返す|
| M_PI |円周率|
| M_SQRT2 |2の平方根|
PHPビルトイン関数~配列に関する関数~
**学習記録**
#前提条件
・PHP version 5.4#配列に関するの関数
・array_unshift
・array_push
・array_shift
・array_pop
・array_slice
・array_splice##array_unshift
配列の**先頭**に追加する“`PHP:書式
$変数=array_unshift(配列, 追加したい要素);
//追加したい要素は何個でも可能
“`
“`builtin.php
$input = [30, 40, 50];
array_unshift($input, 10, 20);
print_r($input);
//結果 : Array ( [0] => 10
// [1] => 20
// [2] => 30
// [3] => 40
// [4] => 50)
“`##array_push
配列の**末尾**に追加する“`PHP:書式
$変数=array_push(配列, 追加したい要素);
//追加したい要素は何