タグ別アーカイブ: PHP

wp-adminへのゼロデイ攻撃を防ぐ機能を追加 – IP Geo Block更新告知

2014年12月、NTTコミュニケーションズが「Zero day Attack Protection(仮称)」を開発、今年4月からのサービス開始を発表しましたが、我が WordPress プラグイン IP Geo Block も独自の仕組みにより一部の ゼロデイ攻撃 を防御する機能を追加しましたので、その告知とバグ出しの協力願いをしたいと思います 🙂 。

続きを読む

SucuriによるWordPress脆弱性の統計

プラグイン作者必読!実例に学ぶ脆弱なWordPressプラグインの作り方、又はwp-adminを守る理由

セキュリティ・コンサルティング Sucuri2014年11月の記事 によると、WordPress プラグインの3大脆弱性は、SQL インジェクション(SQLi)、クロス・サイト・スクリプティング(XSS)、ファイル・インクルージョン(FI)とのことです。

冒頭のグラフ は最新の分析結果で、この事実を裏付けています。プラグイン開発の チュートリアル手引き には、脆弱性を作り込まないためのポイントが上手にまとめられているのに、なぜ無くならないのでしょうか?

「ヒトが作るものだから、バグがあって当然」と言ってしまえばそれまでですが、 Sucuri のブログ を読み漁っていると、こと脆弱性に関する限り、 WordPress に特有の「思い込み」や「見過ごし」といった、ヒトの心理的・認知的な盲点が原因の多くを占めているんじゃないかと思えてきます。

だから単に PHP のセキュリティ How To ではなく、私が公開している唯一のプラグイン の機能設計と脆弱性を作り込まない実装のために勉強したたこと − 実際に攻撃を試し脆弱性を追跡して見えてきたこと − を中心にまとめてみたいと思います。ただし具体的な攻撃方法は、元記事以上に詳しくは触れません、あしからず 😉 。

続きを読む

初歩からわかるWordPressのnonceでAjaxをセキュアに実装する方法

一般的な nonceNnumber used ONCEWeblio 英和辞典 によると、ナンス 又は ノンス と発音)は、Web サイト、特にデータベースに不可逆な変化を引き起こす、意図しない、あるいは重複したリクエストから Web サイトを保護するための、セキュリティが目的のワンタイム・トークンです。

WordPress の nonce は、管理画面に対する CSRF 攻撃英語版 Wikipedia によると、シーサーフ と発音)対策として広く知られているかと思いますが、意外にも Ajax との組み合わせを解説した日本語記事が見当たらなかったので、「いまさら」の共有です。

本記事では、単に Ajax の Tips 的な実装方法だけではなく、CSRF 攻撃の原理や対策についても少しだけ触れたいと思います。またその上で、Ajax に nonce が必要なパターンについて言及します。

さらに、WordPress 3.5 から導入された新しいフィルターフックの使い道を探ってみたいと思います。

続きを読む

IPアドレスからアクセス元サーバーの位置情報を調べるjQueryプラグイン

2000年代前半、荒らし掲示板スパム に悩まされていた頃、JPNIC やら RIPE やらの WHOIS データベースで IP アドレスの出所を調べ、「また関西からだよ」 とか 「お、役所からだゾ、串刺されてんのかな」 とかやっていたわけですが、アクセス元を調べたところで結局のところ IP を弾くイタチゴッコを続けていたものでした。当時は、WHOIS にわざわざ アドレスをコピペしてクリック じゃなく、自サイトからオンラインで調べられたら便利だなぁと思っていました。

さて今もそんなニーズがあるのかわかりませんが、jQuery Plugins にそんな思いを実現してくれる jqIpLocation というプラグインが紹介されていたので、試してみました。

実はこのプラグイン、IPInfoDB が無料で提供する DB サービスを利用して、IP アドレスからアクセスポイントの位置情報を引っ張ってきます。他にも同様のサービスがありましたので、そういった情報も共有してみたいと思います。

続きを読む

Apache以外で使うapache_request_headersの代替コード

LaCoocan の ZEUS サーバー では apache_request_headers() が動作しません。恐らく IIS も、です。なのに WordPress のプラグインとかで、Apache を前提にしたコードを使うのって、反則だと思いません?

なぜこの話題かというと、LaCoocan で WP Super Cache 0.9.9.6 を導入したんですが、コードを眺めていたら幾つかの箇所で使われているんですヨ、コレが。

実は、特定のユーザーエージェントにはキャッシュの静的ページではなく、通常の動的ページを送りたい、というワケがありまして…。apache_request_headers() が動作すれば、「除外するユーザーエージェント」 に設定した文字列を含む相手には、動的ページを送りそうなことが分かったんです。

除外するユーザーエージェントの設定

そこで、本来の W3 Total Cache の仕様 (キャッシュがなければキャッシュを作らずに動的ページを送り、キャッシュがあればキャッシュを送る) とは違う動作になるのでしょうが、私的には都合のよい改造と、ちゃんと仕様通り動作させる事の両方をしちゃうことにしました。
続きを読む