2015年1月12日月曜日

インスタント検索

Google検索で、文字入力するたびに勝手に検索する機能について、
ちょっと調べたのでメモ。

実装自体は非常に単純で、JavaScriptでkeyupイベントを取得してajaxで検索処理を実行して
結果を表示するだけ、サーバサイドはPHPでもJavaでも好きなものを使って良いです。

ただし、何も考えずこのまま実装すると文字を入力するたびに検索処理が走ってしまい
非常に重たいページになってしまう。
そのため、以下のような工夫が必要になる。
・前回のキー入力から一定時間経っている場合のみ検索結果を取得
・カーソルキーやタブキーに反応しないよう、前回の入力内容と比較して同じなら処理中止

こういった注意点を突き詰めていかないと、使いづらくて重いだけのものになってしまい、
誰も使いたくないものができあがるんだろうなーと思った。

2014年5月16日金曜日

WYSIWYGエディタで画像アップロード

WYSIWYGエディタで画像アップロードできるようにしたい!!!

■CKEditor
CKEditorに画像アップロード機能を追加する設定メモ。
KCFinderと連携させる場合、phpでgdを有効化しておく必要がある。

手順などの参考リンク
CKEditorに画像アップロード機能を追加する
CKFinder からKCFinderに乗り換え
CKEditorとKCFinderの最新版がうまく動かないと聞いたので検証

ただし、そのままだとサーバのアップロードディレクトリを直接触るようなイメージになる。
そのため、以下のような懸念がある
・アップロードされた画像がそのまま残る
・他人のアップロード画像を使用したり編集できる
・削除された場合は表示できる画像がなくなる

KCFinderを使わず、画像アップロード機能を自作する場合に参考にできそうなブログ
CKEditor でオリジナルの画像ブラウザを作る的な

■TinyMCE
TinyMCEというエディタ。
解説しているブログを見る感じだと、やりたいことに近いのはこれかも。
CKEditor同様、プラグインで機能拡張するタイプみたい。

TinyMCE エディタ上で画像をアップロードしながら貼り付けられる jbimages プラグインを使ってみた


■その他
プラグインなどを使用せず、アップロード機能を別に作って
エディタ内に挿入する方法だとこんなのがある。
CLEditorとの連携になっているけど、他のエディタとでも連携できるように思う。

CLEditor + jQuery.upload Sample

jQuery.uploadの公式サイトがリンク切れているぽい。
こっちからはダウンロードできる。

jQuery.upload

2014年5月15日木曜日

Strutsの脆弱性

Apache Strutsの脆弱性について調べてみた。
こちらのブログの方が非常に丁寧にまとめていたので、
ポイントを抜粋する形でメモ。

Strutsの脆弱性CVE-2014-0094について改めてまとめてみた
Struts: ClassLoader の操作を許してしまう脆弱性 (CVE-2014-0094, CVE-2014-0112, CVE-2014-0113) について

今回の脆弱性は、外部からJavaのクラスローダーの操作を許してしまう脆弱性です。
(クラスローダーを操作して何が出来るかはStrutsが動作するアプリケーションサーバーに依存します。)

IPAでは次の影響を受ける可能性を報告しています。
・Webアプリケーションの動作権限内で情報の窃取や特定ファイルの操作が出来る
・Webアプリケーションを一時的に使用不可に出来る
・攻撃者が操作したファイルに Java コードが含まれている場合、任意のコードが実行される

対象の主なバージョン
■Struts1
全てのバージョンではないが、サポート終了のため修正版リリースは現在行われていない。
(ただし修正版、または回避策の提供をする可能性についてApache Software Foundationよりアナウンスが出ています。)

■Struts2
2.3.16.1以前全て。
2.3.16.2(2014年4月25日リリース)へアップデートすることで修正されるようです。
ただし、別のこのバージョンも新たな脆弱性が発見されたため、
2014年5月3日に2.3.16.3がリリースされているので、どうせならこっちへアップデートするべき。

とりあえずまとめは以上。
Strutsの現状について、以下のブログで詳しく紹介されていますが、
まだまだ脆弱性がでそうです。



OpenSSLの脆弱性

OpenSSLに脆弱性が発見されたという話をちょっと前に聞いたけど、
具体的にどういう脆弱性なのかがわかりづらかったのでメモ。

OpenSSLの機能の中で、今回脆弱性が発見されたのが
OpenSSL1.0.1から追加されたheartBeat機能という機能。
これは、SSLで通信している相手が稼働状態かを確認するための機能で、
具体的な動作としては、以下の通り。

1.64KBのデータを送信(クライアント⇒サーバ)
2.受信したデータをメモリにコピー(サーバ)
3.メモリ上にコピーした64KBのデータを送信(サーバ⇒クライアント)
4.データが受信可否で稼働状態を確認(クライアント)

脆弱性があるポイントは、1で送信するデータサイズを詐称することができるというところ。
この脆弱性のため、1KBのデータであっても64KBのデータとして送信することで、
サーバはメモリ上に1KBのデータしかコピーしていないのに、64KBのデータを返してしまう。
つまり、メモリ上に存在する意図しない63KB分のデータをクライアントに送信してしまうことになる。

意図しないデータの中には、ユーザの個人情報などが含まれている可能性があるため、
上記の攻撃を繰り返すことでこれらのデータが盗まれてしまうことになる。

この脆弱性が存在するのはOpenSSL1.0.1~1.0.1f と1.0.2-beta~1.0.2-beta1で、
OpenSSL1.0.1g では修正されている、1.0.2系はbeta版ということで放置されてるぽい。
もし該当のバージョンを使用しているならば、早めにバージョンアップするべき。
(ちなみに、1.0.1gの公開は、2014年4月7日)

バージョンアップが難しい場合、「-DOPENSSL_NO_HEARTBEATS」オプションを有効にし、
OpenSSLをリコンパイルすることでも対応可能らしいので、こちらを考慮するのもあり。

SSLを使用するJPドメインWebサイトの4割以上に今回の脆弱性が該当するらしいので、
影響範囲が恐ろしいほど広いのも、騒がれた原因みたい。

今回の問題はハートブリード(Heartbleed)と名前がつけられ、ロゴが作成され、
Wikipediaで専用ページまで作成されているので、一度確認しておいたほうがいい。

ハートブリード(Wikipedia)


2014年4月2日水曜日

デスクトップ整理バッチ

デスクトップがすぐに作業ファイルでいっぱいになるので、
整理用バッチを作ってみた。



@echo off
setlocal

rem ---------------------------------------------------------------------------
rem バッチ名:デスクトップ整理バッチ
rem 機能説明:バックアップ先に今日の日付でフォルダを作成し、
rem           デスクトップのファイル・フォルダを全て移動する。
rem ---------------------------------------------------------------------------

set YYYYMMDD=%DATE:/=%
set BACKUP_DIR=%USERPROFILE%\Documents\デスクトップバックアップ\%YYYYMMDD%
set BAT_NAME=デスクトップ整理.bat

mkdir %BACKUP_DIR%

for /F %%a in ('dir %USERPROFILE%\Desktop /B') do (
if NOT %BAT_NAME% == %%a (
echo "%%a"
  move "%USERPROFILE%\Desktop\%%a" %BACKUP_DIR%
)
)
for /F "skip=2 delims=" %%a in ('dir %USERPROFILE%\Desktop /B') do (
if NOT %BAT_NAME% == %%a (
echo "%%a"
  move "%USERPROFILE%\Desktop\%%a" %BACKUP_DIR%
)
)
pause
endlocal

Linuxのcron登録方法

#crontab -l
cronの設定内容を表示する。

#crontab -e
cronの登録エディタを開く。

cronの設定方法は以下の通り。

設定項目は左から「分」「時」「日」「月」「曜日」となっている。
* * * * * [実行コマンド]

設定可能な数値
分 0-59  時 0-23  日 1-31  月 1-12  曜日 0-7 (0または7は日曜日)

実行時間指定方法
リスト   0,10,20,30  分フィールド指定した場合は0,10,20,30分に実行します。
範囲  1-5         月フィールドで指定した場合、1,2,3,4,5月に処理を実行します。
共存  1,6,9-11     時間フィールドで指定した場合、1時、6時、9時、10時、11時に処理を実行します。
間隔  */10       分フィールドで指定した場合、10分間隔で処理を実行します。
          「/」の後ろに指定した値の間隔で処理を実行します。

Tomcatのスレッドダンプの解析方法

TomcatのCPU負荷が高い場合などに、一定の間隔で5回くらい出力したスレッドダンプを
「侍」というソフトで解析することで、処理中のソースを特定することができます。

Linuxでのスレッドダンプは、以下のコマンドで catalina.out に出力されます。
kill -3 [TomcatのPID]

※TomcatのJavaのオプションに「-Xrs」を付加すると、スレッドダンプを取得するための
 シグナルを受け付けなくなり解析できないので注意が必要です。