top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_644

Web脆弱対策:セキュリティ、じゃあ具体的には、どうすればいいんだ!? ・・・ 【セキュリティ対策】

 2009-01-22
 以前、セキュリティ対策について
 何度か記事を書いたことがある。

 ・カテゴリー [ セキュリティ対策って ]

 ただ、いろいろ情報も錯綜していて
 対応が「その場限り」になりがちだ。
 少しじっくりと、

  具体的な対策方法を、
  実施の作業を通して

 記録してゆくことにしよう。

 以下、最近 ある顧客サイトの仕事 で
 実践した(いや、その最中というか)ものだ。

  追記に ▼

FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more**************************************************
セキュリティ対策実践記録:その1
**************************************************

 ■SQLインジェクション対策
 /*------------------------------------------*/
  □バインド機構
   ・まず、この手がある。
    ・記号文字(プレースホルダ)を利用して、
     ・最初にそれらによって、値が割り当てられる部分を確保
     ・その後、決まった値を「あてはめる」方法で、SQL文を生成

    ・・・この方法がいいことはわかっているのだが、
       (最初からであればともかく)
       今回は、諸々の事情から活用できなかった。

    しかし、その方法への足がかりは、ここに記録しておこう。
   
 ・PHP4 の場合 > Pear DBパッケージを利用
 ・PHP5 の場合 > PHP Data Objects(PDO)を利用

   (PHP5:PDO 例)
/* 値の配列を渡してプリペアドステートメントを実行する */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();

 これは、「PHPマニュアル:PDO::prepare」にある、そのまま
だが、非常にわかり易い。
   ・あらかじめ ? で用意したSQL文ベースに
    後で値をはめ込んでゆくわけだ。(自動的にエスケープ処理される)


  □エスケープ処理
   ・実際は、この方法で地道にサイト内の
    SQL文の生成場所を、それぞれの「事情」に応じて
    対応してゆく作業となった。
    (ははは、まだ作業中! だ。 終わらない・・・)

   ・まず 関数をいくつか用意
    そのうちいくつかを公開する
    (もっといい形を反提案していただけることを期待して)
//**************************************
// 文字列エスケープ
//**************************************
function goEscape($strVal="",$enc="EUC-JP"){
if (is_array($strVal)){ return array_map("goEscape", $strVal);
} elseif ($strVal!=''){ return htmlspecialchars($strVal, ENT_QUOTES, $enc);
} else{ return false; }
}
function goDeEscape($strVal="",$enc="EUC-JP"){
if (is_array($strVal)){ return array_map("goDeEscape", $strVal);
} elseif ($strVal!=''){ return htmlspecialchars_decode($strVal, ENT_QUOTES, $enc);
} else{ return false; }
}

 ※これは、エスケープする処理をまとめたもので
  エンコード場面と、デコード場面(必ず必要であるわけではない)
  に利用する。

//**************************************
// 文字列(数値廻り)チェック
//**************************************
function ckEscapeVals($val="",$type="num"){
if (is_array($val)){ return array_map("ckEscapeVals", $val);
} elseif ($val!=''){
switch ($type) {
case 'num': // 数字
if(!(is_numeric($val))){ return false; }else{ return $val; } break;
case 'engnum': // 英数字
if(preg_match("/^([a-zA-Z0-9]+)$/", $val, $matches)){ return $val; }else{ return false; } break;
case 'eng': // 英字
if(preg_match("/^([a-zA-Z]+)$/", $val, $matches)){ return $val; }else{ return false; } break;
case 'ido': // 緯度・経度
if(preg_match("/^([0-9\.]+)$/", $val, $matches)){ return $val; }else{ return false; } break;
}
} else{ return false; }
}

 ※こちらは、(主に数値ベースの)値をチェックする

 これらに対して
//**************************************
// このような形で、DB接続部分から呼び出す
//**************************************
if((ckEscapeVals($num_id,'num') >0)&&(ckEscapeVals((int)$cate_id,'num') >0)){

 などの制御の後、

$sql_string .= "stritem ='".goEscape($val_str)."'";

 として、エスケープして格納

 ※なお、この投稿は
  今回のみでなく、今後行った作業記録を
  すべて記録してゆこうと思う。
commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/644-8dac45b9
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。