エセプログラマーの戯言

プログラムやリナックスなどについてのメモです

全体表示

[ リスト | 詳細 ]

記事検索
検索
独学Linuxでちょっと興味深いのを見つけました。



この記事にあるように、PDFなどのバイナリファイルのやりとりの際、差分ファイルを使う便利だと思いますが、自分はちょっと違うことを考えました。


先日、メールサーバの不具合を直してくれと頼まれたんですが、見てみると明らかに何者かに侵入され、いろいろ書き直されている形跡がありました。


とりあえず、かなりセキュリティが甘かったので、いろいろやって、不正アクセスは出来ないようにしました。


んで、本題の不具合の方に取りかかったんですが、こいつが、うまくいかない。

具体的には、qmailでpop before smtpをしたいだけなんですが、設定は間違ってないのにうまく行かない。


んで、今疑っているのが、コマンドを書き換えられている可能性。

以前(サーバのセキュリティ)取り上げたように、ルート権限まで取られてたらコマンドも書き換えられててもおかしくありません。

そこで、今回のこのバイナリの差分を作成出来る「xdelta」というソフトを使って、関係しそうなコマンドが正しいものかどうかを検証出来るのではないかと思うわけです。


まだ東京にいるので、帰ったら試してみようと思います!

アパート ケータイ投稿記事

今日アパート申し込みしてきました。

会社まで乗り換え無しで行ける所にしました。


来月から社会人!
頑張りたいと思います。

今回は、PHP+TEXでPDFを出力するクラス「TeXPDFクラス」にエラーチェックを実装してみようと思ってたんですが、風邪をひいてしまいました。

鼻水が止まらなくてきついです。。。。orz

TeXPDFクラスは、体調が回復してから取りかかることにします。

東京 ケータイ投稿記事

今日は、アパートを探すために東京に来ました。


やっぱり、沖縄から東京に来ると寒いですね(笑)

今日は、ちょっと時間がないので、簡単にエラーチェックに付いて考えて、明日以降実装してみようと思います。

コンストラクタ

  public function __construct($texfile){
    $this->texfile = $texfile;
    $this->new_file_name = time();
    $this->platex_path = "platex";
    $this->dvipdf_path = "dvipdfmx";

  }

ここでは、まず、$texfileからNULLバイト文字を削除し、ファイル名が(半角英数字の文字列).texであることチェック。
そして、一時的に作るTEXファイルのファイル名「$new_file_name」は、今は現在時間にしてますが、もしもほとんど同じタイミングでアクセスしたらおかしくなるかもしれないので、time() + ランダムな文字列にしようと思います。

変数のセット

public function set_param($name, $value){
    $this->param[$name] = $value;
  }
これは、$nameが文字列であることを確認します。

テンプレートのTEXファイルの読み込み

  public function input_tex(){
    $texfile = $this->texfile;
    $param = $this->param;

    $hadle = @fopen($texfile, 'r');
    if ( $hadle ){
      while(!feof($hadle)){
	$file_contents .= fgets($hadle);
      }
    }
    fclose($hadle);

    foreach($param as $key => $value){
      $file_contents = str_replace("tpf{".$key."}", $value, $file_contents);
    }
    return $file_contents;
  }

このメソッドでは、まず、アクセスをpublic からprivateに変更します。
次に、テンプレートのTEXファイルが存在するかを確認します。

一時TEXファイルの出力

  private function create_tex($contents){
    $file = $this->new_file_name.".tex";
    $handle = @fopen($file, 'w');
    @fwrite($handle, $contents);
    fclose($handle);    
  }
このメソッドでは、書き込みが成功したかどうかをチェックします。

TEXのコンパイル

  public function platex(){
    $file = $this->new_file_name.".tex";
    $platex = $this->platex_path;
    
    exec($platex." ".$file);
    exec($platex." ".$file);
  }
ここでは、コンパイルによって、$this->new_file_name.".dvi"というファイルが出力されたかどうかを確認します。
コンパイルを二度行っているのは、TEXでは、図のlabel{}とref{}の対応が二度コンパイルしないと有効にならないからです。


DVIファイルからPDFへ変換

  public function dvipdf(){
    $file = $this->new_file_name.".dvi";
    $dvipdf = $this->dvipdf_path;
    
    exec($dvipdf." ".$file);
  }
このメソッドでは、$new_file_name.".pdf"というファイルが出力されたかをチェックします。

TEXをコンパイルするコマンドとDVIからPDFに変換するコマンドの設定

  //TEXをコンパイルするコマンドのパス
  public function set_platex($platex_path){
    $this->platex_path = $platex_path;
  }

  //DVI→PDFのコマンドのパス
  public function set_dvipdf($dvipdf_path){
    $this->dvipdf_path = $dvipdf_path;
  }
このメソッドでも、NULLバイトを削除したあと、文字列であることを確認します。

以上で簡単にですが、チェックするべきところを確認しました。
これの他に気を付けるべきものがあったら、是非教えてください。m(_ _)m

では、次回は、これを実装していきたいと思います。


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事