PJL

Printer Job Language(略称: PJL)は、ヒューレット・パッカード社(Hewlett Packard)によって策定されたプリンタジョブを制御する言語。

リコー社、ゼロックス社、キヤノン社のプリンタをはじめ、ヒューレット・パッカード社以外であってもこのPJLの記述を解釈できる、対応したプリンタがある。

基幹業務系の開発などで、事務処理の種類に応じて直接プリンタを制御して、Aの処理はインナートレイに排紙する、Bの処理はホチキスしてフィニッシャートレイに排紙する、といった印刷に関する一連のすべてを予め事務処理に組み込んで自動化することができる。

適用範囲

利用概要

メーカーごとの機能拡張

印刷送信に限った、記述の概要

機能

印刷送信の他に、プリンタステータスの取得(搭載しているトレイの種類など)をサポートしている。16進数で1Bを<ESC>、改行コードを<CR><LF>と表現し、以下の文字列をプリンタへ送信する。

<ESC>%-12345X@PJL <CR><LF>
@PJL ECHO 09:10:09.1 08-22-00 <CR><LF>
@PJL INFO INTRAYS <CR><LF>
<ESC>%-12345X

すると、プリンタからは以下のようにプリンタ搭載トレイの種類を返す。

@PJL ECHO 09:10:09.1 08-22-00<CR><LF>
<FF>
@PJL INFO INTRAYS [8 TABLE]<CR><LF>
INTRAY NAME<CR><LF>
INTRAY 1 "UPPER TRAY"<CR><LF>
INTRAY 2 "RED PAPER"<CR><LF>
INTRAY 3 "PAPER RED"<CR><LF>
INTRAY 4 "PREPRINT"<CR><LF>
INTRAY 5 "TRAY A1"<CR><LF>
INTRAY 6 "TRAY B1"<CR><LF>
INTRAY 7 "TRAY C1"<CR><LF>
INTRAY 8 "TRAY D1"<CR><LF>
<FF>

プリンタが返す文字列をどのように受け取るか、というのはネットワーク対応プリンタであればFTP接続によって、というのがある。

印刷以外の機能

ハードディスク搭載のプリンタなどで、プリンタが高機能であればプリンタ内部のファイル操作が可能であり FSDIRLIST といったファイルシステム操作のPJLコマンドが利用可能であるなど、言語としての側面を強く持つ。 具体的には以下のようにすることで

<ESC>%-12345X@PJL INFO FILESYS

VOLUME   TOTAL SIZE   FREE SPACE   LOCATION LABEL   STATUS

0:     2929683456   2922577920   HDD         READ-WRITE

のように、ハードディスクのボリューム番号、利用可能容量などが返される。

PJLの悪用による攻撃

複合機(MFP、いわゆるコピー機)では、IPAの「デジタル複合機のセキュリティに関する調査報告書」にて、「PJLコマンドを悪用した攻撃(ディレクトリ・トラバーサル)」の具体例が示されている。

手順としては極めて簡素なもので、PJLコマンドでファイル名「passwd.txt」を探し、これをダウンロードするというものである。

対策としては、このような印刷以外の機能についてはプリンターや複合機がPJLのどの命令に対応しているかといった情報は探しても見つかりにくい為、複合機に対してジョブデータを投入できるホストを特定のプリントスプールサーバやスキャンとファクスのゲートウェイサーバなどに限定する方法が示されているにすぎないが、インターネットから誰もがアクセス可能な状態にしてしまっている複合機があり、2010年の調査ではこのような複合機を位置マッピングした結果、日本、台湾、アメリカ、ヨーロッパなどで国土の全域に渡って設置されていたので、使用者の根本的なセキュリティーに対する認識の甘さにも原因がある。

また、関連してPostScriptも攻撃に利用可能であり、開発者は注意が必要とされている。

脚注