PHP

自作プラグインでwp-config.phpを読み込んでキャッシュの設定を確認する

開発中の block-wpscan というプラグインがあるのですが Wordpressのキャッシュプラグインを使っていると変な動作をすることが分かった。 例外クローラーの追加、判定結果が分かるように。block-wpscan 0.4.2 をリリースしました block-wpscan 0.7.5 で wp-config.php を読み込んでキャッシュが有効なのかどうかを 判定してみたのでそれの覚書です。     概要 WordPress の関数に define(‘WP_CACHE’, true|false) を判定する関数がないので wp-config.php を読み込んで正規表現でやっていこうと思います。 もし関数があったら教えてほしいです…。     コード WP_CONTENT_DIR で /var/www/wordpress/wp-content のパスを取得して 7行目で変数に wp-config.php をそのままぶち込んでます。 9行目で正規表現を使ってキャッシュが有効なのかどうかを判定してます。 define(‘WP_CACHE’, true); define(‘WP_CACHE’,true); define(‘WP_CACHE’, false); #define(‘WP_CACHE’, true); define(‘WP_CACHE’, TRUE); 大文字小文字含めて全部は判定できてると思う(願いたい)     WordPress のプラグインって最初だけ審査が必要なんですけどアップデートとかはいらないんですよね。 絶対情報盗むようなプラグインあるだろうなぁ…。

コンテナをZabbixで監視する

今までずっとKVMを使ってきましたがコンテナ型の方が軽いし速いしで 最近はコンテナ(LXC Container)を使っています。 コンテナ型はKVMと違ってエミュレートされず、cgroupでリソース管理がされるため Zabbix-Agentを入れるだけではダメなんです;;   [blogcard url=”http://www.zabbix.com/img/zabconf2015_jp/presentations/04_zabconf2015_watanabe.pdf”][/blogcard] 詳しいことは上記で説明されています。     コンテナをZabbixで監視する 既に有志がLXC用のZabbixテンプレートを作成していて公開されていますが 私の環境ではネットワークトラフィックのIn/Outが取得できませんでした(何でかは忘れた)   [blogcard url=”https://github.com/rluisr/Zabbix-LXC”][/blogcard] ということでフォークして手直しした。     Zabbix-LXC 変更点 コンテナに1つ以上のNICがある場合でもIN/OUTの転送量が取得できる(合算) 転送量がきちんと取得できるように(?) Proxmoxを使用している場合にZabbixに登録される表示名にホスト名を指定(そのまんまだとid (ex 100, 101とか)で登録される)   インストール方法 [crayon-5b28831349143426933297/]   テンプレートのインポート [crayon-5b28831349157970817863/] の2つインポート   コンテナの登録はLLDによって勝手にされるので放置してるだけで大丈夫だと思います。 オリジナルのレポジトリはPerlでディスカバリースクリプト書かれていましたが、PHPで書き直したのでちょっとね…….。 ちなみにProxmoxはデフォでsudoとphpが入ってないのでご注意。

【PHP】LINE Messaging APIで田村ゆかりさんの公式サイト更新通知BOTを作りなおした #yukarin

従来のLINE BOT APIが廃止予定ということで 新たに発表されたLINE Messaging APIに移行しました。   作ったものはこんな感じ普通です。 LINE Messaging API は管理画面から背景色とかアカウント設定できる項目はめっちゃ増えてて LINE BOT APIよりは個性的なものが作れそう(^o^) 田村ゆかりさんに興味がある人、待ってます\(^o^)/     LINE Messaging API 誰でも手軽に叩けるAPIです。 BOTも作成できるし、管理画面も用意されてて分かりやすい。 無料で作成するBOTはユーザーの発言に対しての返信はできる(REPLY_MESSAGE) が BOTから直接メッセージを送信(PUSH_MESSAGE)するのは月2万ぐらいかかる。 しかし友達登録上限50人という制限付きBOTでは REPLY_MESSAGE & PUSH_MESSAGE どちらも使える。 従来のLINE BOT APIと変わったことはそんなことなくて 移行難易度はそんなに高くないと思います。   Webhookの設定 今回実装にあたって少しだけハマったところは Webhookの設定で、CloudflareのSSL機能を使ったサーバーを指定すると Webhookが飛んでこないという仕様だった。 LINE BOT APIでは使えたんですけどね、いずれか使えるようにはなりそう。 ちなみにLet’s Encryptでは可能です。     実装 今回もPHPです。 特に理由はありません。楽だからです。   callback [crayon-5b28831349514680491709/] [crayon-5b28831349520844273188/]   LINEからのアクセスかどうかは従来のLINE BOT APIと同じで [crayon-5b28831349525855097480/] こんな感じで署名の確認ができる。     Push(BOTからユーザーへメッセージ送信) [crayon-5b28831349528911036823/] [crayon-5b2883134952f774336002/] LINEにリクエストを投げるときはCHANNEL_ACCESS_TOKENをヘッダーに載せるだけ。 LINE DeveloperからサーバーのIPをホワイトリストに登録する必要はあります。 今回の話に関係はないですけどGoutte便利だし何より速い。   メッセージを送信する関数は [crayon-5b28831349533370053970/] 特筆することなし!     戯言 Webhookに関してはイベント内容がJSON見れば一発で分かるようになったので楽でした。 LINE BOT APIでは type 1 が友達追加時で~ type3 がユーザーからのメッセージとかで 分かりにくかった。 あとはドキュメントも日本語が用意されて、各言語のSDKも用意されているので 比較的容易に移行(作成)できました。 ソースコードはこちら rluisr/yukari-line-botA – github

no image

LINE BOT API 実は友達追加時にもCallbackされてた & 署名確認をしよう。

前回こんな記事を書きました。 田村ゆかりさん公式サイトの通知を LINE BOT API で作ってみた。 #yukarin この記事では友達追加をしてもらった際にメッセージを送ってもらって mid(ユーザーID)を保存するという処理だったのですが、友人が 「友達追加時にもCallbackされるからメッセージ送らなくてもmid保存できるよ」と教えてもらいました。   試しに中身を覗いてみた [crayon-5b288313497f0747986523/] 注目するのは “opType”: 4 です。 友達追加時は 4 ブロック時は 8 が返ってきます。 LINE Developers にも記載されてました…。   友達追加時に、midを保存。 ブロック時にmidを削除といったことが可能ですね。 ということでPHPで友達追加時に相手のmidを保存するコードは以下に。 [crayon-5b288313497fd172663559/] この一々保存するの面倒なので一斉送信できるAPIを公開してくだしゃい   ふとコードを書き直してる時にセキュリティやばくね?ってなって思ってた時に署名とかこないの?って思ったら署名乗ってくるみたいですね…。 Qiitaとか9割方、署名確認してないです。   LINEからのアクセスか検証する LINEからのアクセスの場合、ヘッダーに X-LINE-CHANNELSIGNATURE があり これをbase64デコードしたもの + LINEきたらjsonの内容を LINE BUSINESS CENTER で確認できる ChannelSecret をキーとしたHMAC方式SHA256アルゴリズムのハッシュ値が 合致すればOKということです。 [crayon-5b28831349802798401202/]   ちなみに nginx だとPHPの getallheaders 関数が使えないので [crayon-5b28831349804746303564/] よく見るこんなのを使います。

no image

WordPressに攻撃してくるリクエストがおもしろい!【block-wpscan】

WordPressを使用しているサーバーは脆弱性だらけとよく言われてます。 セキュリティはしっかりしないと簡単に侵入されたりしてしまいます。 そんな中で面白かったものをいくつか挙げてみたいと思います。 ちなみにここで紹介している不正アクセスは block-wpscan というプラグインでブロック可能です。   オーソドックスなブルートフォースアタック とログを見てみると無かった。これは意外だった。   xmlrpc.php   xmlrpc.php とは xmlrpc.phpはそもそも、これを使うことで標準の管理画面以外からもAPIを使って、記事の投稿ができるようになるもの。どうやらここへのブルートフォースアタックでのっとりをしようとしているか、Pingback機能を悪用して当サーバーを踏み台にして攻撃に利用するためにアタックされる事例が多い – https://iritec.jp/web_service/10258/ ブルートフォースアタックでもなく、落とそうとしたわけでもないですがやっぱりアクセスはあった。 しかも PHP直打ち。何がしたかったんだろうか…。 wp-login.php へのブルートフォースアタックするのもありますが、xmlrpc.php へでもID/PWをブルートフォースアタックすることができます。     意味不明な攻撃 UserAgentも何だか怪しいし、リクエストURLもやばい。 これだけ見ても全く理解できません。 実際のリクエストURLは長いです↓ [crayon-5b28831349998965477746/] で実際これが何なのか調べてみたら他CMSで使われる PoPs (Points of Presence) といわれる攻撃らしい。 影響あるのは Joomla というCMS。Wordpressには影響なさそう。 ちなみにbase64の部分をデコードしていくと、PHPコードが出てきます。 ということで割愛しますが、詳しくはここで解説されてます。 と、ここまで面白みのある不正なアクセスはそこまでありませんでしたがこれらの攻撃も防げる block-wpscan オススメです!

Amazon RDS 最安インスタンス db.t2.micro を契約してみた。【ベンチマーク】

データベースもクラウドの時代や! 自サーバーにデータベースを置くとバックアップするのが面倒だったり、管理が大変だったりと大変なので クラウドに置いてみようと思った。   Amazon RDS を選んだ理由 無料体験期間で12ヶ月無料で使えるからです! 無料で使えるプランは db.t2.micro 最安インスタンスです。   インスタンス vCPU メモリ PIOPS 用に最適化 ネットワークパフォーマンス 容量 db.t2.micro 1 1GB 無 低 5GB その他の料金については公式サイトを見て下さい。   また、使えるエンジンも多く ・Aurora ・MySQL ・MariaDB ・PostgreSQL ・Oracle ・SQL Server と現時点(2016/04/23)で6個から選べる…。   他にもクラウドデータベースは ・Oracle Cloud ・Google Cloud SQL ・Rackspace があります。     オンデマンドインスタンス & リザーブドインスタンス オンデマンドインスタンス オンデマンドインスタンスでは長期間の契約や初期費用がなく、時間単位でインスタンスに対する料金が発生します。これにより、データベースのキャパシティーを事前にプランニングしたり、購入したりするコストや手間が省けます。オンデマンドの料金設定のため使用した分のみ料金が発生し、開発、テスト、その他の短期ワークロードに最適です。 言ってしまえば従量課金制です。使った分だけ支払います。   リザーブドインスタンス リザーブドインスタンスは一定量のデータベースワークロードに最適で、オンデマンドと比べて大幅にコストを削減できます。オンデマンド料金と比べると、1 年契約のリザーブドインスタンスでは最大 44%、3 年契約のリザーブドインスタンスでは最大 63% のコスト削減が可能です。リザーブドインスタンスの場合は、所定の期間終了まで使用する契約を結ぶことになり、初期費用のお支払いが必要ですが、時間あたりの料金は下記のとおり割安になります。実際に使用したかどうかにかかわらず、期間中は各時間ごとに料金が発生します。 こちらは固定料金みたいなものです。 今回契約したのは オンデマンドインスタンス です。 使うのなんて月に数回程度、数十行のレコードへのINSERT,UPDATE,SELECTぐらいなのでリザーブドインスタンスだととてつもなく料金の無駄になります。     使い方 使い方ではなくインスタンス作成の時ですが、右側を選択すると「無料利用枠範囲内」で 勝手に項目が決定されます。 ステータスが利用可能になるとエンドポイント(URL)が表示されます。 セキュリティポリシー的なやつで、アクセス元IPをホワイトリストに追加する必要があります。 mysql -h <エンドポイントURL> -u <ユーザー名> -p でいつものように使えるようになります。 既存のデータベースをダンプして、RDSにインポートしてコードを書き換えれば 簡単に移行できます。   ベンチマーク 今回は Sysbench というベンチマークソフトを使ってみました。 CPU、ディスクI/O、データベースなど様々なベンチマークを測ることができます。 準備 [crayon-5b28831349b23818325318/] レコード数は10000   [crayon-5b28831349b3a508558013/] 何となく分かると思います。 比較はトランザクション数で比較します。   トランザクションとは 一般にデータベースには多くの人がアクセスし、様々な処理を行います。閲覧するだけの人もいれば、データを追加・更新したり、削除する人もいます。その中でも特に、データの追加・更新・削除、SQL 文で言うと「INSERT 文」「UPDATE 文」「DELETE 文」についての処理のまとまりをトランザクションと言います。 – http://www.techscore.com/tech/sql/SQL11/11_01.html/ 詳しいことはこちらが参考になります。     vCPU : 4 / メモリ : 4GB サーバー [crayon-5b28831349b3e238615290/] transactions: 11349 (189.15 per sec.)  …

田村ゆかりさん公式サイトの通知を LINE BOT API で作ってみた。 #yukarin

LINE BOT が先着1万人に配られるということで乗ってみた。 今日も相変わらずPHP 今回は 田村ゆかりさんの公式サイトが更新される度にLINE BOT APIを通して通知するといったものを作った。   登録の仕方 左記QRコードで友達追加をして、1度メッセージを送信すると登録が完了になります。 なんで1度メッセージを送信する必要性があるのかは後で説明しまうす。     雑書 [crayon-5b28831349ce5792026767/] LINE BOT APIの登録の仕方はQiitaの方が詳しく説明されてるので割愛します。 このファイルは最初の登録のときにしか使いません。 何でだか知らないけど登録者全員にメッセージを送るAPIもないし、登録者全員のID(mid)を取得するAPIも今のところないので 1度メッセージを送ってもらって、ファイルに保存するといった方法を取りました。他にいい方法あったら教えて下さい…。   [crayon-5b28831349cf0314672522/] 本当は1つのファイルに纏めたくて、引数有無で条件分岐してたけど不格好になっちゃうし見栄えが悪かったので別々にしました。 midがまとめられたファイルを配列に入れてforeachで回してますが、 「mid,mid,mid」みたいな感じで一斉送信できるらしいです。 で、でも改行を”,”で置換して文末の”,”を削除して~って流れよりforeachの方が楽な気がします。最初から「mid,mid,mid」みたいな感じで保存すればいいだけなんですけどね。 更新されると以下のようなメッセージが届きます。   新しくAPIが追加されることを願います。 ちなみにスクレイピングに関しては運営に承認済みです^ー^

例外クローラーの追加、判定結果が分かるように。block-wpscan 0.4.2 をリリースしました

block-wpscan WordPressのプラグインです。 不正っぽいアクセスをブロックするものです。 WordPressでwpscan,tor,proxy,コマンドラインからのアクセスをブロックするプラグイン「block-wpscan」   Changelog Twitterbotを例外に追加 なんでブロックされたかを表示     Twitterbotを例外に追加 ブログの記事URLをツイートとかすると”Twitter-bot”からのアクセスがくる。 これがブロックされてたので例外へ追加するように。     なんでブロックされたかを表示 新たに”Judge”という項目を追加 ”Not browser”というのはコマンドラインからのアクセスを指します。 ベンチマーク取ってみたんだけど、何故かプラグインが無効の時のほうが速い…。 なんでだろう。誰かベンチマーク取ったら教えて下さい…。