管理外のProxyサーバーはやばい?

以前 Google Play Music のサービスを開始するにあたって、Googleサーバーに対して日本からのアクセスではなく、サービス提供国からのアクセスと偽装する必要がありまして、まぁ、利用したわけなんですが・・・
よく考えると、セキュリティー的には最悪の行動って感じですね。

Proxyサーバーって何ぞや?という方に簡単に説明しますと、通常はWebブラウザーがWebサーバーと通信をするのですが、Proxyサーバーを中継することによって、Webブラウザーが直接通信できない相手でも、Proxyサーバーが双方と通信できるなら、通信できるって仕組みなんです。??? 一言でいうと伝言ゲームの伝言役のひとですね。

Proxyサーバーは伝言すべきではない命令や情報を相手に伝えないことが出来たり、複数のパソコンが同じ情報を取得しようとしたときに、一度だけ相手から取得してコピーを受け渡すなど、セキュリティー面やトラフィック面で導入すると良い面があるのです。
そのほかにも、アクセスログを取得したり、暗号化通信の中継を行ったりできます。
ってことは、ProxyサーバーはWebブラウザーとWebサーバーの通信内容はすべて見えるってことです。
IDとパスワードを入力すれば、それも取得できます。
ってことは漏れたってことですよ。

まぁ、一応、その辺のリスクも考慮して、Proxyサーバーを利用する前に認証を済ませておき、機能ONする作業だけProxyサーバー経由に切り替えたんですけど、平文のパスワードは流れなかったと思うけど、符号化されたパスワードは当然記録されている可能性があるってことです。

だからこそ、最近はHTTPSアクセスが増えてきたと思うのですが、これも付け替えってことが可能なので、Webブラウザーに表示される電子証明書がProxyサーバーの物だった・・・なんてこともないとは言えない。

そういうわけで、自分が構築したまたは信頼できるProxyサーバー以外を利用したときは、さっさとパスワード変更をすべきなんじゃないかと思います。信頼できないProxyサーバーを利用中にパスワード変更やユーザー情報の表示なんて、住民票のコピーをばら撒いているのと同じ行動と思っていただけると良いかと。

ってことで、Google Play Musicは素晴らしいサービスですが、有効化するのは海外旅行中にするのが一番良いってことです。
クラウド(個人利用)万歳!!



クラウドが便利な携帯端末

貴社のシステムをクラウド化しませんか?

最近よく聞く定番営業メニューですが、正直なところ自社データセンターを構築している企業にとって目に見えた効果が出るとは言い難いと思っています。
データセンターのネットワークがボトルネックになっているとか、既存システムが新しいOSに対応できないなど問題を抱えているならば、トラフィックの分散、システムのWeb化によるOS制限の緩和などメリットがあるかもしれません。

それでも、クラウド化することによって、データセンター拠点のユーザーから見ればサーバーレスポンスは確実に低下するので、同じ業務をするための待ち時間が増えるなどにより、思ったほど評価を得られない結果となるかもしれません。

クラウドが便利だと感じる瞬間。それは携帯端末や複数端末で同じ作業を行おうとしたとき。たとえばGoogle Play Music。日本ではサービス提供されていませんが、このサービスを利用すると、CDから私的複製を行ったmp3データをGoogleに転送することで、世界どこでも、ブラウザが使える環境さえあれば同じ曲を聴くことができる。

Google DriveやWindows Live SkyDriveを使えばExcel(エグザイルと読もう)ファイルをどのパソコンからでも参照、編集ができるので、会員番号やよくないけどパスワードを保存しておけば、どこでも参照可能です。

メール、予定表、連絡先もGmailなどで管理すればさらに便利です。

 

クラウドが現れる前は「端末=1アカウント」という使い方が主流だったと思いますが、クラウド化された世界では「個人=1アカウント≠端末」という関係になって、適材適所な端末を選択できるようになりました。

まだ、携帯電話番号は端末と結びついていますが、050Plusなどを使えば端末との結びつきも弱くなるでしょう。

そうやって利用サービスを変えずに、端末を自由に選べる。それがクラウドの良さだと思います。もう、携帯電話の機種変で電話帳や音楽データの移行を悩まなくてもいいよっていう時代が来ています。

 

まぁ、クラウドがいかに便利でも、もしクラウドサービスが停止したり運営会社が破たんしたりした時のリスクを考慮して、手元にバックアップを行っておくということは重要ですが、この素晴らしい世界を利用しないのはもったいない。

私はそう思います。

企業にとってクラウドは魔法の杖ではありませんが、個人の携帯電話にとっては魔法の杖に限りなく近い存在だと思います。
いま、スマートフォンからフィーチャーフォンに変更を検討している人って、たぶんクラウドを利用していない人なんだろうなぁ~もったいない。

スマートフォンを選ぶときは、グローバルモデルにしなさい。
国内の多機能モデルにはない新しい世界が待っていますよ。

 

 



SCCM2012でのMVLSライセンススプレッドシート

 相変わらずSCCM2012を検証中ですが、いろいろ変わってて、既定の設定も少なくなったので、自分ナイズしやすくなった半面、何かと参考になる情報が減ってしまいました。

レポートフォルダを作成できないので管理がチョットしにくくなったなど微妙な悪改もあったりして、同じことをできるようにするまでちょっと時間がかかりますね。

さて、System Center Configuration Manager 2007でMVLSライセンススプレッドシートファイルの取り込みではMVLSサイトからCSVファイルをダウンロードして、Excelを使ってXMLファイルに変換する必要があったので、文字情報と数字情報の指定なんかでエラーになったりすることがあったのですが、System Center 2012 Configuration Managerになってから、ダウンロードしたCSVファイルのまま取り込みができるようになっています。

始めっからこうしてくれればよかったのに~と思うのですが、これは良い改善ですね。

それにしても、早くローカライズされたドキュメントが出てほしいです。
英語と機械翻訳を読むのは疲れます。



Export,Import-SPWebのちょいテク

もっと良いほかの方法があったらごめんね。

リストやディスカッションの移動を行うとき、PowerShellのExport-SPWebコマンドレットを使ってエクスポートして、移動先のサイトにインポートするのが通常の作業だと思いますが、リストやディスカッションをインポートするときのItemURLがエクスポート元のURLを引き継ぐ仕様で困ったことってありませんか?

初期のアイテムだと /List/List1/ だったりして、移動先にもすでにList1があって、どうすれば~~とか悩むことがあるかもしれません。または別の名前に変更したいとか

そういう時は Export-SPWeb で -NoFileCompression パラメーターを付けてエクスポートすると、アイテム個々のファイルといくつかのXMLファイルが生成されます。

でXMLファイルの中を見ると /List/List1/ など移動元のItemURLが記述している場所がいくつかあるので、これを新しい名前 /List/NewList/ とかに置換してからインポートすると、そのURLでリストが作成されます。

これで綴りを間違ったりしたときもこれを使って修正することもできますね。



System Center 2012ライセンス変わりすぎ~

変わったってのは英語の資料で知ってたけど、こんなに早くリリースされると思ってなかったので適当読みしてたけど、いざ正式リリースして構築しようとしたらビビった。

System Center Configuration Manager 2007のサーバーライセンスを購入した時はSQL Serverのライセンスをどうするかで悩んで、既存のSQL Serverを利用することにしたんだけど、今回からサーバーライセンスがサーバーMLに変更されて、管理サーバライセンスは含まれるようになったんだよね。(MSに確認とっていないので若干不安ですが・・・)

ってことは・・・System Center 2007 With SQL Serverってサーバーライセンスを買っていたら、SQL Server分の費用が丸損ですか?

MSVLからのダウンロードにもSystem Center 2012にSQL Server 2008 R2が含まれるってことで、無料じゃないけど、無料でSQL Serverが付いてきます。もしかしてライセンス値上げしてる?

今までは単一機能を使ってたわけだけど、ほかの機能も使えるようになったってのはうれしいです。資料だけ見ててもこれがあるとなんか便利そうって機能あるしね。
System Center 2012の資料はすべて英語ってのが理解度に問題が発生するのですが・・・



ISBNのチェック

先日投稿した jQueryで本の表紙画像を表示してみる はエラーチェックもなかったので、ISBNの正常性チェックする関数を作ってみた。


内容はチェックデジットを再計算して比較するという簡単なもの。
一応ISBN-10及び13の両方に対応できるようにしています。


 


function checkISBN(str) {
 var isbn = "";
 var checkDigit = 0;
 switch(str.length) {
  case 10:
   for (i = 10; i > 1; i-- ) {
    checkDigit += parseInt(str.charAt(10 - i)) * i;
   }
   checkDigit = (11 - (checkDigit % 11)) % 11;
   isbn =  str.substr(0,9) + (checkDigit == 10 ? 'X' :checkDigit.toString());
   break;
  case 13:
   for ( i = 0; i < 12; i++) {
    if( i % 2 == 0 )
     checkDigit += parseInt(str.charAt(i)) * 1;
    else
     checkDigit += parseInt(str.charAt(i)) * 3;
   }
   checkDigit = (10 - (checkDigit % 10)) % 10;
   isbn = str.substr(0,12) + checkDigit.toString();
   break;
 }
 return str.toUpperCase() == isbn ? true : false;
}


いつもの決まり文句ですが、このコードを使って何が起きても責任は持ちません。
素人が作ったスクリプトだということを忘れずに・・・



jQueryで本の表紙画像を表示してみる

動くものが、とりあえずできた。


何をやっているかというと、<td>ISBN||*****<td>と書かれたHTML文を<td><img></td>に置き換える処理をやってます。


で、*****の部分は書籍ISBN番号の10桁または13桁を書く。


そうすると、画像を用意しなくても、楽天Web Serviceから表紙画像を取得できるようになる。


 


じゃぁ、スクリプト部分ね。
ちなみにISBNの桁変換は、観測気球さんのHPを参考にしています。


 


<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
//セレクター部 
$("document").ready(function(){
  $("td:contains('ISBN||')").each( function(i){
   var code = this.innerText;
   booksearch( code.slice(6,code.length), this);
  });
 });


//ISBNの10桁を13桁に変換する関数
function convISBN10toISBN13(str)
 {
  var c;
  var checkDigit = 0;
  var result = "";
  c = '9';
  result += c;
  checkDigit += (c - 0) * 1;
  c = '7';
  result += c;
  checkDigit += (c - 0) * 3;
  c = '8';
  result += c;
  checkDigit += (c - 0) * 1;
  for ( i = 0; i < 9; i++ ) {
   c = str.charAt(i);
   if ( i % 2 == 0 )
    checkDigit += (c - 0) * 3;
   else
    checkDigit += (c - 0) * 1;
   result += c;
  }
  checkDigit = (10 - (checkDigit % 10)) % 10;
  result += (checkDigit + "");
  return ( result );
 }


//実際に検索して画像に置き換える関数 
function booksearch(ISBN,Output)
 {
  if(ISBN.length == 10){
   ISBN13 = convISBN10toISBN13(ISBN);
   } else {
   ISBN13 = ISBN;
   }
  $.ajax({ type: "GET",
    url: "http://api.rakuten.co.jp/rws/3.0/json?callBack=?",
    data: { "developerId":"楽天から取得してね",
     "operation" :"BooksTotalSearch",
     "version": "2011-07-07",
     "isbnjan" : ISBN13},
    dataType: "jsonp",
    success: function(data){
     switch (data.Header.Status){
      case "Success":
       var Items = data.Body.BooksTotalSearch.Items.Item;
       $(Output).html("<img src=" + Items[0].mediumImageUrl + ">");
       break;
      case "NotFound":
       $(Output).append("検索結果が存在しない");
       break;
      case "ServerError":
       $(Output).append("サーバエラー");
       break;
      case "ClientError":
       $(Output).append("クライアントエラー");
       break;
      case "Maintenance":
       $(Output).append("メンテナンス中");
       break;
     };
     },
    error: function(data){
     $(Output).append("リクエストエラー");
     $(Output).append(data.Header.StatusMsg);
    }
  });
 };
</script>



でHTML文は適当に・・・


<table border=1>
  <tr>
   <td>978-4822294625 </td>
   <td>ISBN||9784822294625</td>
  </tr>
  <tr>
   <td>4873113903</td>
   <td>ISBN||4873113903</td>
  </tr>
</table>


こんな感じで書きます。
すると、ISBN||*****の部分が置き換わるって感じです。


とりあえず動いたって感じなので、うまくいかないところとかあると思いますが、自由に使ってやってください。 


あと、無駄に関数化している部分はjsファイルとWebパーツ部に分割してSharePointで使う予定なので気にしないでください。



SharePoint アイテム保管ライブラリをのぞいてみよう(2025年12月改訂)

※2025年コンテンツ検索等の機能がリニューアルされましたので修正しました。 ※2023年アカウント移行に失敗し画像を失ったので再度取得し改訂しました。 Office 365 Advent Calendar 2021  の12月16日投稿です。 警告: 個人的な理解に基づく内容、...