SSEの応答コードと通知オプション
SSEに接続できなかった場合や、SSEライセンスが無効になったり有効期限が切れたりした場合に備えて、Javaコードには、システムサポート担当者に送信する通知や電子メールを自動生成するためのフックが必要です。こうした通知を生成する機能を使用するためには、アンチウイルスのクライアントコードをアプリケーションに組み込むときに、javamailやその他の電子メールパッケージを使用することが必要な場合があります。AVClientオブジェクトのconnect (String host) API、およびヘルパークラスAVRespondのrequest(String server_response)メソッドを参照してください。
コードの一覧を以下に示します。
- private String one = "ICAP/1.0 100";
- private String two = "ICAP/1.0 200";
- private String three = "ICAP/1.0 201";
- private String four = "ICAP/1.0 204";
- private String five = "ICAP/1.0 400";
- private String six = "ICAP/1.0 403";
- private String seven = "ICAP/1.0 404";
- private String eight = "ICAP/1.0 405";
- private String nine = "ICAP/1.0 408";
- private String ten = "ICAP/1.0 500";
- private String eleven = "ICAP/1.0 503";
- private String twelve = "ICAP/1.0 505";
- private String thirteen = "ICAP/1.0 533";
- private String fourteen = "ICAP/1.0 539";
- private String fifteen = "ICAP/1.0 551";
- private String sixteen = "ICAP/1.0 558";
私は、SSEサーバーからの応答文字列に、ライセンスの有効期限切れに対応する文字列「ICAP/1.0 558」を追加しました。対応が必要な主なコードには、ウイルスを示すtwoとthree、およびファイルが異常なしであることを示すfourがあります。
応答コードの定義の一覧については、Symantec Scan Engineソフトウェア開発者ガイド(表3-4の状態コード)を参照してください。
ライセンスが無効の場合に管理者に電子メールを送信するには、次のようにします。
if (server_response.equals(fourteen) || server_response.equals(sixteen)) { // license is bad // if you want to let files through without actually scanning the_return = "''clean''"; // send email - this must be working if option is "clean" String body = "Note the license for Symantec Scan Engine is invalid or has expired!\n\rPlease see - class AVRespond for more info.\n\rThis email is sent every time a client uploads an un-scanned file"; try { sendMail("symantec_scan_engine@mycompany.com", "YOU@mycompany.com", "Invalid or expired license for Symantec Scan Engine", body); } catch (Exception ex) { logger.error("AV client could not send email notification\nMake sure properties has \"mail.smtp.host\" entry in it \n " + ex); } }
まとめ
この記事では、JEEアプリケーションにファイルのアンチウイルススキャン機能を組み込む方法について説明しました。驚いたことに、このしくみについて知っている開発者はあまり多くありません。外部ファイルをスキャンせずにおくことはセキュリティリスクとなり得るにもかかわらずです。
現在のところ、スキャン処理の実装はサードパーティベンダごとに固有で、独自のJava APIを備えた製品を利用することになります。Java開発者としては、スキャンAPIの標準プロトコルをSunが策定して、各ベンダに準拠してもらう形になった方がうれしいと思います。ちょうど、Java Messaging Service(JMS)プロトコルの場合と同じようにです。エンタープライズ分野におけるスキャン処理は、JMSほどの存在感はないにせよ、一部のエンタープライズアプリケーションにとって重要な側面であることは間違いありません。
