GETメソッドとPOSTメソッド

先日、某社のホームページの評価を依頼いただいて、初心者にありがちな間違いを指摘させていただいた。

それは、POSTとGETの使い分けの区別がついていないということ。

どこに書いてあるのだが分からないのだが、なぜか多くの初心者がPOSTの方が安全だから、困ったときはPOSTみたいな解釈をしている。

でも、これは大間違いで、そもそもどちらが安全かどうかという考え方がおかしい。

あくまでも適材適所です。

意外と気がつかないものですが、直訳するとわかりやすい。

GET – 得る
サーバーにリクエストを送って何らかのデータを得たい場合に使用する。
多くの場合、単純なWEBページであったり、検索結果だったりする。
POST – 投稿する
メールフォームでメールを送ったり、データベースに書き込んだり、ファイルを保存したり、「送る」ことが目的の場合に使用する。

ちなみにW3CのHTML4.01仕様書には以下のように記載されています。

getメソッドは、フォームが等羃である場合、すなわち副次作用がない場合にのみ用いるようにしなければならない。データベース検索の多くは目に見える副次作用がなく、getメソッドの理想的応用例となる。

フォーム処理に関連するサービスが、例えばフォームがデータベース更新を伴うなど、副次作用を引き起こすものである場合、postメソッドを利用する必要がある。

海外の無料で使えるクールなアイコン

本日は、クールなアイコン素材集をピックアップしました。

インターフェースのワンポイントに使うと効果的なものを厳選しました。

famfamfam.com
SILK ICONSというアイコン用素材集を配布している。ライセンスはCreative Commons Attribution 3.0
Tango Desktop Project
クオリティに加えて様々なサイズを配布しているので重宝することが多い。ライセンスはGPL
Refresh Cl Icons
23,400ものアイコン素材集。キーワード検索(英語がベター)が利用できるので探しやすい。ライセンスはアイコンによって違うので注意が必要。

属性型JPドメインが失効してしまった。

誤って、属性型JPドメインが失効してしまった。

経緯はともかく、レジストラからのメールにより失効したことに気がついたのですが、whoisで調べると、状態が「Connected」になっていて、さらに有効期限も来年になっている。

ネットで調べると同じように失効したのに「Connected」になっているケースが掲示板等で質問されていますが、「Connected」となっていたり有効期限が延長されているからと言って、廃止になっていないかと言えばそれは間違いです。

JPRSさんに直接電話して仕組みを確認したところ、どうやらJPRSとレジストラの間ではドメインの更新は自動で行われるようです。

従って、ドメインを更新していなくてもwhoisでの表示は更新されたかのように表示されます。

しかし、ドメイン所有者によって更新されなかったドメインは、レジストラが「廃止申請」というのをJPRSに提出するため、これによってドメイン廃止の手続きが行われるようです。

レジストラがJPRSに対して廃止申請を提出すると、翌月の上旬まではネームサーバー情報等は登録されたままの状態で保留されます。(ネームサーバー情報が登録されたままなので、ドメインは使用可能な状態です。)

この間は、「廃止取り下げ手続き」というのをレジストラからJPRSに対して行ってもらえば、無事復活となるわけですが、レジストラによっては「廃止取り下げ手続き」をしてくれない事業者もあります。

今回弊社が使用していたレジストラは実際に、この廃止取り下げをしてくれませんでした。

ただし、この場合でも慌てない。(慌てろ!?)
実はこの状態でも他のレジストラに移行が可能なので、廃止取り下げをしてくれるレジストラに移行してしまって、そのレジストラから廃止取り下げをしてもらえば、無事復活となります。

この間に、JPRSがそのドメインのネームサーバー情報を削除してしまうと、一から取得する必要がありますので、速やかに移行を済ませてしまいましょう。

万一、ドメインの状態が「Suspended」になっている場合は、速やかに坊主になって土下座する必要があります。

ieでこのページを表示できません。

ieでHTMLの処理が完了する前に、JavaScriptでDomの操作などを行うと「このページを表示できません。」と言われる。

このような場合はそのコードをwindowオブジェクトのloadイベントに引っ越してやることで回避できる。

ふーーーーん。確かに、理解できなくもないが、Firefoxでは動く。

ちなみにモバイル向けASPはじめました。

メールアドレスにダブルクォーテーション?

弊社が開発したモバイル向けサービスの登録者の方で、emailアドレスの中にダブルクォーテーションが含まれているユーザーがいるのを発見した。

これは、一部のMTAまたはMUAの仕様のようで、以下のいづれかに該当するメールアドレスは、@以前の部分がダブルクォーテーションで囲まれるらしい。

  • @以前の部分に連続したドットがある
  • @直前にドットがある

というわけで、ちょっとはまった。

不況時にIT企業がすべき10の施策

以下、CNET Japanの「ガートナー、不況時にIT企業がすべき10の施策を発表」の引用

  • リスクとリターンを共有する価格オプションの提案
     リスクとリターンを顧客企業と共有することにより、予算が厳しい顧客の財政的負担を軽減し、不要な値引き要求を避ける。
  • 決算書に与える効果の観点からサービス価値のアピール
     投資家が顧客企業に厳しい目を注いでいる状況において、サービス価値を数値化し、決算書に提示できるようにする。
  • IT支出の最適化に焦点を当てた商品やサービスの提案
     長期的な顧客企業のビジネス成長に貢献するため、投資領域の選択と集中を促すような商品やサービスを提供する。
  • 顧客のリスク環境、リスク許容度、リスク管理アプローチの理解

     リスクマネジメントは、ITサービスの需要を促進する重要な要因の1つである。リスクに関する意思決定支援サービスは、新たなビジネス機会となる。

  • 経済危機に対する各国政府の方針と計画を迅速に把握
     世界的な経済危機への新しい政策は、顧客企業の対応を支援する機会創出となる。
  • 既存顧客との関係維持、強化へ注力
     経済低迷期の顧客企業は、信頼のおけるプロバイダーとの既存取引関係を維持しようとする。このため、新規顧客の獲得よりも既存顧客との関係強化のほうが効率的である。
  • 従量価格型サービスへの移行機会の模索
     顧客企業のビジネス規模の拡大や縮小に合わせた従量制の料金体系によって、顧客の経済的リスクを大幅に軽減できる。
  • サービスインに伴う負荷の軽減
     サービスの導入に困難やリスクが伴うと受注が困難になる。サービスが契約書どおりに提供されることを、目に見える形で顧客に示す必要がある。
  • イノベーションとプロセス改善のトレンドの把握
     ビジネスプロセスの改善を企業は常に求めている。このため、需要が顕在化するタイミングをいち早く知り、迅速にビジネス機会に結び付ける。
  • 新たな市場の創出
     新しい市場を創出する。このためには、市場ニーズを明確に理解するとともに、顧客を獲得し、サービスを提供するためのイニシアティブを確立することが重要である。

ほほーなるほど。

キーボード 「東プレ NG01B0 REALFORCE91UBK」

私の愛するキーボードの紹介です。

このキーボードにこだわるあまり、自宅用と仕事用で2つ持ってたりします。

東プレ NG01B0 REALFORCE91UBK

このキーボードとにかくいいんです。

まず、フルキーボードでありながら、テンキーがない。
テンキーがないので、マウスを近くにおけます。

また、カナ文字がないので、すっきりしていて見やすいのも特徴です。
つや消しのブラックに薄い金色の文字というのも気に入ってます。

キーもメカニカルスイッチなので、タイプのたびに響く乾いた音がとても快適です。

そして、このキーボードの最大の特徴がキーの軽さで、一般的なキーが50g〜なのに対して45gの軽さになっており、なんと小指で押すキーのみさらに軽い30gになっています。

本当におすすめなので、お店で見かけたらぜひ触ってみてください。

PHPやJavaScriptなどの開発はシータネットワークスをよろしくお願いします。

showModalDialog()

Firefox3でも使えることが分かった。

こういうのって微妙ですよね。
無料なんだからFirefox2の人は3にアップグレードしてくれてることを勝手に期待して、showModalDialogを使ったりすると、意外とアップグレードしていない人が多かったりする。。。

そんなことを悩んでたら以下のようなソースをネットで発見した。

var subwin = window.open(page, null, param);
function chkSubWin() {
  if(subwin != null && subwin != "") {
    var ret = subwin.closed;
    if(ret == false) {
      subwin.focus();
    }
  }
} 

上記のソースは、親ウインドウから子ウインドウが開いているかどうかを判断するためのもの。

chkSubWinを親ウインドウのonFocusイベント等に登録すれば、showModalDialogっぽいことが可能になる。

PHPやJavaScriptなどの開発はシータネットワークスをよろしくお願いします。

PHP+PostgreSQLでのSQLインジェクション対策

某大手企業向けのCMSシステムでセキュリティ監査があって、弊社納入のシステムで、ちょっと指摘をいただきました。

実際には、SQLインジェクションが実行可能だったわけではなく、お客様に土下座なんて事態にも至らなかったのですが、知らないことがあったのは事実なので、素直に今後は気を付けようと思う今日この頃。

内容は、以下の通り。全て必須対策だそうです。

コンパイル済みSQLを使用する

$db = pg_connect('dbname=…');
$result = pg_prepare($db, 'query1',
'SELECT * FROM TABLE1 WHERE CITY = $1 AND AGE >= $2');
$result = pg_execute($db, 'query1', array($city, $age));

これは正直言って関数自体を知りませんでした。
最近の入門書には書いてあるのかもしれませんね。
「ベテランであること」と「スキル」は全く関係ないことを痛感しました。

header関数で文字コードを必ず指定する

header("Content-Type: text/html; charset=UTF-8");

こちらに解説がありました。
結果オーライでやっていましたが、XSS対策の一つになるとは知りませんでした。

文字列のエスケープ

pg_escape_string()

これは知ってましたが以下の内容は勉強不足でした。

「’」(シングルクオート)と「\」(バックスラッシュ)のエスケープを実
施している場合でも、文字コードの問題によってSQLインジェクションが発生するケースがあります。
処理系の日本語対応が不十分な場合、シフトJISで2バイト目が「\」(バックスラッシュ)のアスキーコードである「0x5C」になっている文字が入力されると「’」(シングルクオート)が「\(0x5C)」にエスケープされます。
これにより、SQLインジェクションを成立させることが可能となりますので、
対策の際には注意が必要です。
具体的には以下の方法があります。

  • 最新のデータベース接続ライブラリを使用した上で、データベースエンジンにて提供されたエスケープ機能を利用する
  • バインド機構を利用する
  • PostgreSQLの場合は、以下の設定を利用する。この場合円記号「\」のエスケープはしないことに注意。
    backslash_quote = off
    standard_conforming_strings = on

とても勉強になりました。

2009/06/25 追記
徳丸様のご指摘により、standard_conforming_strings = offの部分をonに修正しました。