ラベル web の投稿を表示しています。 すべての投稿を表示
ラベル web の投稿を表示しています。 すべての投稿を表示

2016年5月1日日曜日

シマンテックのクロスルートなサーバ証明書が使えなくなる?

2016年4月のマイクロソフト社のルート証明書情報更新の影響と対策に関するご案内(続報) | Symantec

意訳
Microsoftが2016年4月19~20日(日本時間)に配信するルート証明書情報の更新により、シマンテックのクロスルートを付けているサーバ証明書を使っている場合にWindows上の(Firefox以外の)ブラウザで警告が出るようになる。
回避するにはクロスルートを外す。


このMicrosoftの更新はWindows Updateとは別らしい。
なお、4/19~20となっているが4/20になってMicrosoftが更新を延期したらしい。(結局、4/26~27に実施。)


クロスルートを外すと、ガラケー等で使えなくなるのでは?

クロスルート設定用証明書の設定について、どのような対応が必要でしょうか? | Symantec のPDFによると、ガラケーへの影響は2機種のみ。スマホでもいくつか影響があるが、発売が2010年以前なので影響は少なそう。SHA-1を切り捨てたことにより、既に古いガラケーの多くはSSL/TLSの対象外になっていた。

ちなみに、 Windowsが遂にSymantecG1ルートを捨てるらしい - 情緒不安定。 によるとクロスルート証明書のIssuerが問題なので、中間CA証明書(クロスルートを含む)自体がG1でなくても影響がある。(シマンテックがクロスルート証明書として配布している VeriSign Class 3 Public Primary Certification Authority - G5 のIssuerがG1なので。)


クロスルートを付けている場合に問題が発生するクライアントPC(Windows)の条件を見ると、

条件3 : クライアント環境のルート証明書ストア(Windows Trusted Root Store)に、G5ルート証明書*2が含まれていない場合
*2「VeriSign Class 3 Public Primary Certification Authority - G5」
とある。

おのれSSL!謀ったな・・!! | ツチノコブログ によると、
最近のブラウザではPC/スマフォ問わずにG5証明書が予めインポートされています。ですがwindowsXPのSP2以前やフィーチャーフォンの一部端末はG5証明書がインポートされておらず、『VeriSign Class 3 Public Primary CA』(通称:G1証明書)がインポートされています。

【追記有(2016.04.22)】Windowsが遂にSymantecG1ルートを捨てるらしい - 情緒不安定。 でも、
SymantecG5ルート証明書が入っていないパソコン。
つまり、レガシーなパソコンです。(WindowsXP以前、WindowsUpdateなどを定期的に行ってないと怪しいです。)
とあるので、Windows Vista以降は大丈夫?

でも 2016年4月のマイクロソフト社のルート証明書情報更新の影響と対策に関するご案内(続報) | Symantec によると、XP以降はG5証明書が初期状態ではインストールされていなくて、必要になったらインストールされるらしい。インストールされていない状態でシマンテックのクロスルートに当たると、G1の方を読んでしまうのでエラーになってしまう。


HTTPS セキュリティ証明書における SHA-1 から SHA-256 へのハッシュアルゴリズムの変更について によると、クロスルート無しでクライアント(接続元)がJavaの場合、
1.4.2 より前 → 接続できない
1.4.2 ~ 1.6.0_18 → ごにょごにょしてG5をCAストアに追加すれば接続できる
1.6.0_19 以上 → 接続できる

Java SE 6 Update 19 Release Notes. から Bug ID: JDK-6904162 Add new VeriSign root CA certificates to JRE and remove some old/unused ones を見ても、「verisignclass3g5ca」とあるので6u19でG5が追加されたようだ。


シマンテックによるG5のテストサイトは Symantec SSL test (中間CAがクロスルート無しの「Symantec Class 3 EV SSL CA - G3 」で、そのIssuerがG5。)

2015年6月29日月曜日

JavaScript, CSSライブラリの CDN



たくさんのライブラリをホスティングしているところ

RawGit
・(cdn.rawgit.comの方は)by MaxCDN
・Github上のライブラリが対象

jsDelivr
・by MaxCDN and CloudFlare

cdnjs
・by CloudFlare

OSSCDN
・by MaxCDN



特定のライブラリのみホスティングしているところ(と言ってもGoogleとMicrosoftはそこそこ揃ってる)

Google Developers Hosted Libraries
・by Google
・AngularJSあり

Microsoft Ajax Content Delivery Network
・by Microsoft
・Bootstrap、Knockoutあり

jQuery CDN
・by MaxCDN
・jQeuryファミリーのみ

Bootstrap CDN
・by MaxCDN
・Bootstrap、Font AwesomeとBootswatchのみ

Yahoo! Developer Network
・by Yahoo
YUIPure.cssのみ
・HTTPS不可


MaxCDNがんばってる


参考
floatingdays: JavaScriptフレームワーク/ライブラリの CDNいろいろ


2015年2月25日水曜日

Content Security Policy

ApacheでContent Security Policyを設定したメモ。


httpd.confで設定する例。

Header set Content-Security-Policy "default-src 'self'; script-src 'self', 'unsafe-inline', www.example.com"


とりあえずレポートだけ見たい場合の例。
Header set Content-Security-Policy-Report-Only \
"default-src 'none';\
 script-src 'self';\
 object-src 'none';\
 img-src 'self';\
 media-src 'none';\
 frame-src 'none';\
 font-src 'none';\
 connect-src 'none';\
 style-src 'self';\
 report-uri /csp-report.php?v=1"

レポートでどのポリシーに違反したのか見やすくするため、xxxx-srcを全部書いた。
何がエラーになるか分かるように基本厳し目に、使わなそうなのはとりあえずnoneにしている。
report-uriのパラメータ(v=1)は後述。

右辺の書き方については下記参照。
CSP policy directives - Security | MDN

はまりそうなとこだけ書くと、

  • 'none'・'self'・'unsafe-inline'・'unsafe-eval'はシングルクォーテーションも含めて書く必要がある。
  • データスキーム(data:)はコロンも含めて書く。
    (mod_pagespeedを使っていると、気づかない間にデータスキームが使われていたりする。)
    ちなみに、スキームはデータに限らず、"https:"など特定のスキーム限定を指定できるみたい。
  • URLはスキームを省略可(例:www.example.com)。省略した場合、元のページと同じスキームと同じもののみ許可する。
    ポートも同様。
  • URLで別のスキームを許可したい場合、別途記載が必要。
    例:元のページがhttpで、読み込むCSSがhttpsの場合、httpsのURLも書く必要がある。
    ワイルドカードが使えるという説明もあったが、下記のどちらも駄目だった(ブラウザによる?)
  • *://www.example.com
  • *//www.example.com
  • URLのサブドメインはワイルドカード(*)が使える。
    サブドメインをワイルドカードにすると、サブサブ(...略)ドメインまでワイルドに適用される。
    ただしサブドメイン無しには適用されないらしい。


レポートをログに書き出すPHPの例。
<?php
if (!$_GET || $_GET['v'] < 1) {
        exit;
}
$report = json_decode(file_get_contents('php://input'), true);
$log = date('[Y-m-d H:i:s] ') . $_SERVER['HTTP_USER_AGENT'] . ' ';
$log .= var_export($report['csp-report'], true) . "\n";
error_log($log, 3, '/var/log/csp-report.log');

Content-Security-Policy-Report-Onlyの例でreport-uriにパラメータを付けたのは、このPHPの2行目で古いポリシーを無視するため。
ブラウザによってはキャッシュしてしまうようで、古いポリシーに基づき送信してくることがあり、ノイズになるので。
ポリシーを変えたら、パラメータの数字とPHPの2行目の数字を両方インクリメントする。

ログファイルはApacheが書き込めるように権限設定しておく。

(2015/3/2 追記)
logrotateも追加しておく。(phpのlogrotate設定をコピーして作成。)
/var/log/csp-report.log { missingok notifempty}

(追記終わり)

また、ModSecurityを使っている場合はレポートがModSecurityではじかれないように注意。

ログを見ていると、違反URLとして報告される"about"はabout:blankだと思うけど、"asset"って何だろう?



ちなみに、Gmailのポリシーはこんな感じだった。
script-src https://*.talkgadget.google.com 'self' 'unsafe-inline' 'unsafe-eval' https://talkgadget.google.com https://www.googleapis.com https://www-gm-opensocial.googleusercontent.com https://docs.google.com https://www.google.com https://s.ytimg.com https://www.youtube.com https://ssl.google-analytics.com https://apis.google.com https://clients1.google.com https://ssl.gstatic.com https://www.gstatic.com blob:;frame-src https://*.talkgadget.google.com https://www.gstatic.com 'self' https://accounts.google.com https://apis.google.com https://clients6.google.com https://content.googleapis.com https://mail-attachment.googleusercontent.com https://www.google.com https://docs.google.com https://drive.google.com https://*.googleusercontent.com https://feedback.googleusercontent.com https://talkgadget.google.com https://isolated.mail.google.com https://www-gm-opensocial.googleusercontent.com https://plus.google.com https://wallet.google.com https://www.youtube.com https://clients5.google.com https://ci3.googleusercontent.com;object-src https://mail-attachment.googleusercontent.com;report-uri /mail/cspreport

見やすく整形。
script-src
https://*.talkgadget.google.com
'self'
'unsafe-inline'
'unsafe-eval'
https://talkgadget.google.com
https://www.googleapis.com
https://www-gm-opensocial.googleusercontent.com
https://docs.google.com
https://www.google.com
https://s.ytimg.com
https://www.youtube.com
https://ssl.google-analytics.com
https://apis.google.com
https://clients1.google.com
https://ssl.gstatic.com
https://www.gstatic.com
blob:
frame-src
https://*.talkgadget.google.com
https://www.gstatic.com
'self'
https://accounts.google.com
https://apis.google.com
https://clients6.google.com
https://content.googleapis.com
https://mail-attachment.googleusercontent.com
https://www.google.com
https://docs.google.com
https://drive.google.com
https://*.googleusercontent.com
https://feedback.googleusercontent.com
https://talkgadget.google.com
https://isolated.mail.google.com
https://www-gm-opensocial.googleusercontent.com
https://plus.google.com
https://wallet.google.com
https://www.youtube.com
https://clients5.google.com
https://ci3.googleusercontent.com
object-src
https://mail-attachment.googleusercontent.com
report-uri
/mail/cspreport

scriptは'unsafe-inline'も'unsafe-eval'も許可してしまっているが、imgも含めて*を使っていないのは立派。
style等は(defaultも)指定していないが、不要という判断か、指定すると差し障りがあるのか、どちらだろう?

また、1バイトを削るのにもこだわるGoogleがわざわざこれだけの文字列を送信するのは、セキュリティの方が重要だからということだろう。
サブドメインをワイルドカードでまとめれば随分減りそうだが、Googleともなると使っているサブドメインも膨大なので、セキュリティが担保しづらくなるのだろう。
policy-uriを指定してポリシーをXMLでやりとりしてキャッシュを効かせれば総通信料は減りそうだが、柔軟性とのトレードオフか。
report-uriも送信料を増やすが、これ無しは運用的にきっと難しいだろう。

2015年1月25日日曜日

自己証明書の作り方 2015年版


Apache用(他でも使えると思うけど)の、自己署名のサーバ証明書(SSL証明書、改め、TLS証明書?)の作り方のメモ。

条件

  • 秘密鍵はパスフレーズ無し=暗号化しない
  • 2048ビット
  • SHA-2

コマンド
# 秘密鍵作成(2048ビットを指定、暗号化指定は無し)
openssl genrsa -out server.key 2048
# CSR作成
openssl req -new -key server.key -out server.csr
# 証明書作成(SHA-256を指定、期間は適当に)
openssl x509 -req -in server.csr -signkey server.key -days 3650 -out server.crt -sha256

手元のブラウザで、"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"になった(最強?)

参考:CentOS OpenSSLを使用したSSL用の秘密鍵と証明書の作成 | kakiro-web カキローウェブ

2014年8月24日日曜日

CSSの font-familyについての参考サイト 2014


参考になったサイトいろいろ。


CSSのfont-family指定に関する考察 2014年版 | セブンシックス

下記について触れられていて、参考になる。

  • ブラウザ/OSのデフォルトフォント
  • Macが全角のfont-familyを無視する件とその例外条件
  • 游書体
  • 大手サイトのfont-family



CSSでのフォント指定について考える(2014年) - DTP Transit(Mac OS X, OS X Mavericks, Web Fonts, Web制作, iPhone, フォント)

Win/Macの日本語/アルファベットのfont-familyのブラウザ別対応状況表あり。
游ゴシック体と游明朝体はWinodws 8.1では日本語名、OS X Mavericks(10.9)ではアルファベット名のみの対応であるため、両名の併記が必要となります。
Osaka−等幅は貴重なOS X唯一の和文等幅フォントであるため、monospaceでは利用します。



ブラウザ、モバイル、OSそれぞれにデフォルトでインストールされている日本語フォント一覧

ブラウザ/OSごとの、指定なし/serif/sans-serifそれぞれのデフォルトフォントを調べている。



「游ゴシック」フォントと「Yu Gothic」フォントの違い - ななふぉ

違うらしい。



「ヒラギノ明朝 Pro」と「ヒラギノ明朝 ProN」の違い - 強火で進め

分かりやすい。


上記を参考に、個人的な好みとしてはこんな感じ?

画面表示用(ゴシック)
font-family: "游ゴシック", YuGothic, "Hiragino Kaku Gothic ProN", "メイリオ", sans-serif;

印刷用(明朝)
font-family: "游明朝", YuMincho, "Hiragino Mincho ProN", "MS P明朝", serif;

優先順位は、
  1. 游書体(Win用)
  2. Yu書体(Mac用)
  3. ヒラギノProN(Mac/iOS用)
  4. メイリオ/MS P明朝(Win用)
  5. デフォルトフォント

2013年12月17日火曜日

タスク(TODO)共有サービスの調査メモ

日本語で使えるタスク共有サービスにアカウント登録して調べたメモ。


Brabio!

  • UIはネイティブアプリライクで使いやすいが、ちょっと情報過多?
  • ガントチャートを使いこなせるなら、とても便利そう。
  • ガントチャートを使わずにタスク管理するだけなら、オーバースペックでかえって分かりづらいか。
  • コメントにメールで返信できるのが便利そう。

Backlog
  • タスクのプロパティが豊富。
  • Tracに似ているので、TracやRedmine経験者なら入りやすい。
  • UIは非システム系の人でもとっつきやすいが、やや古いか。(タスク選択時に小さなリンク部分をクリックしないと反応しない、等)

サイボウズLive
  • UIが使いやすい。
  • 機能的にもバランスが取れている。

Wrike
  • UIが洗練されている。その分、ライトユーザーにはとっつきずらいか。
  • 日本語化されていない(英語のままの)箇所が、ちらほらある。
  • 使い方がわからない機能がある。

Todous
  • UIはゆるい感じでよいが、配色等のデザインはいまいちか。
  • 余分な機能が無いのは分かりやすくて良い。
  • タスクをまとめて見られないのが使いづらい。

ChatWork
  • タスク管理については最低限の機能しかない。(タスクにコメントをつけられない、等)


参考

2013年12月10日火曜日

今どきのHTTPヘッダーによるセキュリティ向上の調査メモ

今夜つける HTTPレスポンスヘッダー (セキュリティ編) - うさぎ文学日記の中で、よく知らなかったヘッダーについて調べたメモ。

いくつかのヘッダーについてのブラウザ別のサポート状況はこちら。
(ちょっと古いが、少なくともこれ以降のバージョンではサポートしているということは分かる。)

IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第8章 マッシュアップ:クライアントサイドマッシュアップ: #4 対策に利用できる技術


X-XSS-Protection

IE8以降のXSSフィルターはデフォルトで有効になっている(ブロッキングモードではない)。

Security through HTTP response headers

[IEInternals] XSS フィルターを制御する | Hebikuzure's Tech Memo

Internet Explorer 8 には、XSS フィルターとして知られている、反射型クロスサイト スクリプティング攻撃を防止するのに有効な画期的新機能があります。このフィルターは既定ではインターネット ゾーン、信頼済みサイト ゾーン、制限付きサイト ゾーンで動作します。

オフにしている人や、XSS on XSS Filterに備えて、ブロッキングモードで有効にさせるのが無難?
X-XSS-Protection: 1; mode=block


Content-Security-Policy

(参考)Content Security PolicyでXSSを断ち切る | monoの開発ブログ

インラインリソースは'unsafe-inline'で許可できる。
dataスキームURIには"data:"で許可できる。

An Introduction to Content Security Policy - HTML5 Rocks

IEがほぼサポートしていないようなので、効果は限定的か。

CSP policy directives - Security | MDN
CSP is quite usable in Chrome 16+, Safari 6+, and Firefox 4+, and has (very) limited support in IE 10.

セキュリティとしては非常に強力だが、ホワイトリストのメンテが面倒なので外部リソースを気軽に使うようなサイトでは使うのは難しい?

あるいは、こんな風に思いっきり緩くしておくか?(これだと意味がないか...)
Content-Security-Policy:
default-src 'self';
script-src 'unsafe-inline' *;
img-src data: *;
frame-src *;
font-src *;
style-src 'unsafe-inline' *;
report-uri /csp-report.php

見やすくするために改行している。未検証なので取扱注意。
faviconはimg-srcに含まれる。
違反が見つかったら、report-uriにJSONでPOSTされる。
eval()が必要なら'unsafe-inline'も追加する。

Content-Security-Policy-Report-Onlyでチェックのみに使うのが良いかもしれない。


Strict-Transport-Security

IEが10でもサポートしていないことを考えると、これが効かない場合のリダイレクト等の処理も必要。

HTTP Strict Transport Security - OWASP

2012年10月22日月曜日

小さな会社のITインフラを低予算で揃える方法を妄想してみた

もし小さな会社のITインフラを最低予算で用意するなら...

  • メール、カレンダー共有、ファイル共有、ドキュメント共有 → Google Apps
    • ファイル共有は普通に考えたらファイルサーバを立てるんだけど、思い切ってクラウドで。Dropboxと迷うところこだけど、どうせGoogle Appsを使うなら挑戦的にGoogle Driveで。検索に強そうでしょ?(漢ならS3直で!というのも香しいが...)
    • ドキュメント共有はGoogle Docsを使い社内用のメモ程度のものを想定。社外とのやりとりは、結局ExcelやWordが中心になるだろうから。Goolgeスプレッドシートが使い物になればなあ...。
  • Webサイト → Blogger
    • 静的ページを組み合わせて「ホームページ」風にする。
    • ブログ部分は新着情報的に使う。
    • 会社所在地を載せるならGoogle Maps埋め込みで。
  • お問合せフォーム → Google App Engineでチャチャッと作る
    • 入力されたらメールを飛ばす。
    • Google App Engineはhttpsで使えるのが便利。
    • 本当に簡単に済ませるなら、お問合せ用メールアドレス載せとくだけという手もある。
  • ドメイン
    • Webサイトを www.xxxxx.com にして、 お問合せフォームを ssl.xxxxx.comにする感じかな。あるいはWebサイトを xxxxx.com にして、お問合せフォームを q.xxxxx.com とか?(人力検索っぽい!)
  • タスク管理 → Backlog
    • Redmineの方がいろいろカスタマイズはできるけど、非開発者にフレンドリーなBacklogが無難かな。
    • Backlogいつの間にかGitに対応してる!
    • Backlogにもファイル共有あるんだ...有料版使うならこっちのファイル共有を使うという手もあるか。
  • 何かでサーバが必要になったら → Amazon EC2
    • 定期的にS3にバックアップをとる。
 これなら社内にサーバが要らない。出先でも普通に仕事が出来る。外出が多いなら、いっそ事務所には固定回線無しで、イーモバイルのみというのもいいかもね。

他にも思いついたら足してく(かも)。

2011年5月9日月曜日

Webベースのテキストエディタ ecoderのカスタマイズメモ

WebブラウザでPHP等を編集できるオンラインテキストエディタのecoderのセットアップ時の変更箇所のメモ。


前提知識

  • $_SESSION['live'] == 0 になるのはサーバがlocalhostの場合


変更箇所
  • /code.php
    • 一通り関係しそうな設定を変更する
  • /code/base/server.php
    • $_SESSION['google']を0にすると初期表示ページのAdSenseが非表示になる
  • /code/tree/type.php
    • 表示対象の拡張子を追加する場合は、if文の該当箇所に追加する
  • その他
    • .htaccessを使わない場合は、Noticeを抑制するために index.php の先頭あたりに下記を入れる?
      error_reporting(E_ALL ^ E_NOTICE);
    • ただしphp.iniでE_STRICTを有効にしている場合はStrictエラーが出てしまうことがある。
      PHPのパース時に出るので、PHP内でerror_reportingを変更してもこれには効かない。(参考:PHP: error_reporting - Manual
(2012/04/18 追記)
  • /code/logs/analytics.php
    • Google Analyticsの読み込みをコメントアウトする
ちなみに上記はversion 0.4.9の話。今の最新は0.4.10みたい。
(追記 終わり)

2011年3月17日木曜日

Webブラウザからコーディングができるオンラインテキストエディタいろいろ




Webブラウザを使ってサーバ上のソースコード(テキストファイル)を編集できる、Webベースのオンラインテキストエディタを調べたメモ。
(さらっとしか調べてないので勘違い等あるかも。)



今のところ、本命はCloud9 IDEで、それをEclipse Orionが追う形か。(Orionがリリースされたらいろんな状況が一変するかも?)
でもPHPだけならecoderでいいかな?grepができない以外は基本的なことはできそう。
ちなみに、ecoderを試しに使ってみたら良かったので、結局他のは調べただけで試してはいない。


参考

2010年6月14日月曜日

システム開発で使うオンラインの日本語マニュアル



意外とマニュアル内検索が無かったり、あっても検索しづらかったりすることが少なくない。
また、普通にGoogle検索から探そうとすると古いマニュアルばかりヒットすることも(Postgresとか)。
素直に英語のマニュアルで調べればいいんだろうけど...

2010年6月10日木曜日

DNS Rebinding(リバインディング)についての調査メモ

DNS Rebindingは質(たち)が悪いらしい

【White Hat Security調査】2010年に最も警戒すべき脅威は「DNSリバインディング」 : セキュリティ・マネジメント - Computerworld.jp
(補足)はてなブックマーク - ockeghemのブックマーク - 2010年3月19日



DNS Rebindingについてのわかり易い説明

DNS Rebinding | 鳩丸ぐろっさり (用語集)



DNS Rebindingを悪用する具体例

セキュリティ情報 - iモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性
ケータイtwitter(twtr.jp)においてDNS Rebinding攻撃に対する脆弱性を発見・通報し、即座に修正された - 徳丸浩の日記

これらの例ではLANではなく、携帯の「かんたんログイン」との合わせ技により脆弱性を突いている。



簡易テスト

「かんたんログイン」DNSリバインディング耐性のチェック方法 - 自分でできる - HASHコンサルティング徳丸浩の日記



サーバ側での対策




参考
untitled - Powered by Google ドキュメント

2010年4月5日月曜日

サーバサイドJavaScript用ライブラリ

Webサーバ等のサーバサイドの処理をJavaScriptでやるならnode.js




Apacheのモジュールとして使うならv8cgi
  • v8cgi
  • これも(その名の通り)V8を使っている
  • MySQL接続、テンプレート、GDなどいろいろ揃っている
  • 作者はWWW SQL Designerなどを作ったondrej.zaraさん
  • Windows版も(一応)用意されている(現在はproblemeticだそうだ)

2010年3月20日土曜日

Webブラウザで DBを参照・更新・管理できるツールいろいろ

クラウドの時代ですから。

個人的にお薦めなのはAdminer。一般受けしそうなのはSQL Buddy。


MySQL用(上の方が使いやすい)

  • Adminer
    • PHP1ファイルのみ(無理に1ファイルにすることないと思うけど)。設置すれば設定不要ですぐ使える
    • シンプルだが普段使う機能は一通り揃ってる。シンプルだからこそ使いやすい
    • SQLをガリガリ書きたい人にお薦め
    • データのclone(コピー)ができるのが何気に便利
    • 見た目は少々無骨。CSSファイルをダウンロードすればSkinを変えられる
    • 昔はphpMinAdminという名前だったが改名した
    • 通常版より"English only"の方が少しファイルサイズが小さい。そんなに変わらないか
    • ライセンスはApache License
  • Adminer Editor
    • Adminerの簡易版。データの参照・登録・更新・削除だけしかできない
    • 別途Extensionsを用意しないと動かないようだ
    • データをいじるだけならこれでいいかも。逆に、データをいじる以上のこと(テーブルの変更とか、DBのDROPとか)をさせたくないユーザー向けに渡すのにちょうどいい(それを意識して作ったんだと思う)
  • SQL Buddy
  • phpMyAdmin
  • MySQL Quick Admin
    • 見た目はわりと良い。Ajaxでサクサク動く
    • 最初にconfig.phpを編集する必要があるみたい(ログイン機能がうまく動かなかったので)
    • SELECTのSQLを自分で書けない?実用するには辛いかも
    • 最後のUpdateは2007年6月。PHP5.3で動かすとDeprecatedが出る
    • ライセンスは明記されていないが、フォーラムにこんなやり取りが書いてあった
  • PHP Mini Admin for MySQL
  • Webadmin-mysql
    • あまり使われていない?


PostgreSQL用


これらのツールのようにPHPでつくっちゃえば、DB側がバージョンアップしてもphp-pdo/php-mysqlが対応してくれるので、ツール側での対応は特にいらないというのはクライアントアプリのツールには無い利点だと気付いた。

2009年1月26日月曜日

v8cgiのインストールと簡単なサンプル

v8cgiWWW SQL Designerを作ったondrej.zara氏が作ったサーバサイドJavaScript実行環境&ライブラリ。
CGI感覚で手軽にJavaScriptでWebプログラムが書ける。(さらに、テンプレート機能を使えばPHP感覚で書ける。)

ソースとWindows用のバイナリが配布されている。
メールライブラリや画像ライブラリ(GD)、テンプレートライブラリなどが付属している。


Windowsへのインストール
(参考:Installation - v8cgi - How to install v8cgi - Google Code

  1. v8cgi - Google CodeからZIPをダウンロード。展開して適当なフォルダに置く。(例:C:\test\v8cgi)
  2. v8cgi.confをCドライブの直下(コンパイル時に指定された場所)に移動する。
  3. v8cgi.confの中身を編集。(パスを環境に合わせる。)
    (例)
    // put default .js and .dll files here
    Config["libraryPath"] = "c:/test/v8cgi/lib";
  4. コマンドプロンプトからv8cgi.exeを実行してみる。エラーが無ければOK。
    C:\test\v8cgi>v8cgi.exe
    Nothing to do.
  5. Apacheの設定ファイルhttpd.confにCGI実行の設定を追加。
    (例)
    <Location /v8cgi>
     Options +ExecCGI
     AddHandler cgi-script .ssjs
    </Location>
    ※mod_cgiが有効になっていなかったら有効にしておく。
    LoadModule cgi_module modules/mod_cgi.so
  6. Apacheを再起動。
  7. Webのディレクトリにテスト用のScriptを作る。(例:htdosc\v8cgi\exaple.ssjs)
    (例 1)
    #!/test/v8cgi/v8cgi.exe
    response.write("Hello v8cgi!");
     ※responseオブジェクトはデフォルトでインスタンスが生成されている。(参考:API_HTTP - v8cgi - Library "http.js" - Google Code
    (例 2)
    #!/test/v8cgi/v8cgi.exe
    System.stdout("Content-type: text/plain\n\n");
    System.stdout("Hello v8cgi!");
     ※response.writeを使わない場合、Content-typeを出力しないと500 Internal Server Error(Premature end of script headers: example.ssjs)になる。
  8. 上記のファイルにアクセスしてみる。エラーが無ければOK。



DBを使う例
#!/test/v8cgi/v8cgi
library("mysql.dll");
library("query.js");

Query.setDB(new MySQL().connect("localhost", "db_user", "db_password", "schema"));

var result = new Query(Query.SELECT)
 .field("id").field("name") //SELECT
 .table("members") //FROM
 .where("%f = %s", "name", "TARO") //WHERE
 .execute();

response.write(result.numRows() + "<br>");

var rows = result.fetchObjects();
for (var i = 0; i < rows.length; i++) {
 response.write(rows[i]["id"] + ":" + rows[i]["name"] + "<br>");
}


テンプレートを使う例
テンプレートを呼び出すファイルの記述
#!/test/v8cgi/v8cgi
library("template.js");

var t = new Template({suffix: "tpl.html"}); //現行バージョン(0.2.0)にはバグがあるのでsuffixを指定しないとエラーになる
var var1 = "abc"; //動的なデータは変数に入れておけばテンプレート内から参照できる
var var2 = 123;
response.write(t.process("example")); //現行バージョン(0.2.0)ではdataを渡しても無視される

テンプレートの記述(example.tpl.html)
<html>
<head><title>TEST</title></head>
<body>
This is a random number: $(Math.random())

$code( for(var i = 0; i < 10; i++) { )
<li>$(i)</li>
$code( } )

$(var1) $(var2)
</body>
</html>


REQUEST情報を取り出す方法
"HTTP_"で始まる情報はrequest.header()で取り出せるが、それ以外は直接_headersの中から取り出すしか無さそう。
#!/test/v8cgi/v8cgi
response.write(request._headers["SCRIPT_URL"]);


感想
  • シンプルでよい。ソース追って理解できる。
  • DBアクセス、テンプレートエンジン、メール送信と揃っていて、即戦力っぽい。
  • DAOがORマッパーでなくSQLヘルパーなのが好き。さすがERDを描くためにツールを作ってしまった人だけある。
  • DBアクセスがプレースホルダーでないのが残念。escapeはしているようだがPreparedでないと何かと嫌。

  • response.writeってのがASPみたいでちょっと嫌。echo()とかでラップすればよいが。
  • 実際に使うとしたらmod_rewriteを絡めたオレームワーク(オレオレ・フレームワーク)を被せることになりそう。



参考:Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ

2008年10月30日木曜日

Scala調査メモ

Javaから離れて久しいが、最近Scalaが気になる。



感想:
  • 文法が面白い。ループとか。
  • XMLを練り込めるのが面白い。
  • 特にレンタルサーバの場合など、PHPほど気軽に使えなさそう。
  • Apacheのモジュールで動けば気軽に使えるのだが...

2008年7月28日月曜日

WWW SQL Designerの Save ・ Loadをスマートに改良

WWW SQL Designerの改良第2弾。(第1弾はWWW SQL Designerのインストール&設定。)
WWW SQL Designer(以下WSDと略す)でServer側にデータを保存する場合の操作を楽にする。

ちなみにWWW SQL Designerの現在の最新版は2.1.1。2.0.1からそれほど変更はなさそう。


初期表示時のデータのロード
これは改良ではなくもともと本体が持つ機能。
ドキュメントには書いてないが、WSDでは下記のようにURLに保存時の名前を付けてアクセスすると、保存されているデータを初期表示できる。

http://localhost/wsd/?keyword=foo


保存時の名前のセット
保存する時に名前を訊かれるが、デフォルトが空なのでいちいち入力するのが面倒。上記のようにURLにkeywordがある場合、それをデフォルトで表示すると便利。
js/wwwsqldesigner.jsの1197行目を下記のように変更する。
var name = prompt(_("serversaveprompt"),"");

var name = prompt(_("serversaveprompt"), location.href.split("=")[1]);


ロード時のURLのリセット
上記の保存時の名前のセットする改良を生かすには、ロード時にはロードする名前に合わせてURL中のkeywordが変わるようにしたい。
js/wwwsqldesigner.jsの1208行目(「SQL.IO.prototype.serverload = function(e, keyword)」の直下)に下記を追加する。
if (!keyword) {
 var name = prompt(_("serverloadprompt"),"");
 if (name) {
  location.href = "?keyword=" + encodeURIComponent(name);
 }
 return;
}

これでロード時にそのkeywordのURLに遷移するようになる。

2008年6月10日火曜日

急上昇ワード by Google を取得するURL

iGoogleのガジェット「急上昇ワード by Google」で表示するのと同じ内容のXMLのURL。
検索ワードの他、簡単な説明等も記載されている。

http://www.google.com/m/services/trends/get


ガジェットの方で実際に取得する場合はJSONPの中にXMLを埋め込んでいる。


2008年4月26日土曜日

htmlSQLの基本的な使い方

WebスクレイピングのライブラリhtmlSQLの使い方メモ。


スクレイピングの準備

//Snoopyをinclude
include_once("../snoopy.class.php");
//htmlSQLをinclude
include_once("../htmlsql.class.php");

//インスタンス生成(Exampleで使われている"$wsql"という変数名は、昔はWebSQLという名前だった名残り)
$wsql = new htmlsql();


Webページからスクレイピング
if (!$wsql->connect('url', 'http://codedump.jonasjohn.de/')){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 1


ローカルにあるファイルからスクレイピング
if (!$wsql->connect('file', 'demo_data.htm')){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 2


文字列からスクレイピング
(文字列にconnectするというのも変だが。)
if (!$wsql->connect('string', $some_html)){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 6


Queryの実行例
if (!$wsql->query('SELECT * FROM a WHERE $class == "nav_item"')){
 print "Query error: " . $wsql->error;
 exit;
}

// show results:
foreach($wsql->fetch_array() as $row){
 print_r($row);
}
from Example 1
他にも下記のメソッドが使える
  • $wsql->fetch_objects(); //オブジェクトとして取り出す
  • $wsql->get_result_count(); //結果の件数を取得する



WHERE句のバリエーション
  • 要素の属性を指定
    • WHERE $class == "nav_item"
    • WHERE $id == "header"
    • WHERE preg_match("/^http:///", $href)
  • 要素のテキストを指定
    • WHERE preg_match("/^array_/i", $text)
  • 複数の条件(orもできる)
    • WHERE preg_match("/^/snippets/i", $href) and preg_match("/^array_/i", $text)
  • WHERE句無しでもOK
  • WHERE句の中身はeval()で実行して判定される。ユーザーの入力値をそのままWHERE句に入れないように注意。(Never trust user input!



取得データ
  • 取得した各要素について、下記のデータが配列に入っている
    • 各属性
    • タグ名(tagname)
    • テキスト(text)



ユーザーエージェントやリファラの変更方法
$wsql->set_user_agent('MyAgentName/0.9');
$wsql->set_referer('http://www.jonasjohn.de/custom/referer/');
from Example 12


その他
  • httpsのWebページへのアクセスはできない
  • htmlSQLの内部でpreg系の関数を使ってるが、preg系はマルチバイトに対応していない。状況によってはうまく動かないかも。その場合は文字コードをUTF-8にして、u修飾子を付ければ回避できそう。


2008年3月7日金曜日

国内ブログサービスのユーザー数の変遷 (2007 ~ 2008)

国内の大手ブログサービスの、最近1年間でのアクティブユーザー数の変化。
データはブログサービス比較 - ブログファン ブログ総合情報のもの。


2007年

  1. FC2ブログ    289,819
  2. livedoor Blog 276,660
  3. Yahoo!ブログ 209,658
  4. 楽天ブログ   151,438
  5. ヤプログ!    149,629
  6. アメーバブログ 131,776
  7. goo ブログ    124,757
  8. Seesaaブログ 98,652
  9. エキサイトブログ 93,419
  10. JUGEM      89,597



2008年 (カッコ内は2007年の順位からの変動)
  1. FC2ブログ 378,886 (→)
  2. アメーバブログ 325,553 (↑)
  3. livedoor Blog 236,064 (↓)
  4. Yahoo!ブログ 226,906 (↓)
  5. ヤプログ! 168,901 (→)
  6. Seesaaブログ 162,245 (↑)
  7. 楽天ブログ 129,134 (↓)
  8. goo ブログ 123,208 (↓)
  9. JUGEM 109,601 (↑)
  10. ココログ 72,675  (↑)


アメーバブログの躍進が目を引く。Seesaaも意外に頑張ってる。

ブログ アーカイブ

tags