top


総投稿数 本 
no_

スポンサーサイト

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

SQLインジェクション:まずはここから対策すべきだよな ・・・ 【脆弱性攻撃】

 2008-07-09
 日々、ネットの世界で「創る」ことばかりに夢中になって、ひょいと
足元を救われることがある。つまらないボンミスもあれば、バグとり
の不足によるものが多いが、そうではない他者による攻撃、これは
ついつい忘れがちになるが、最大の危機的リスクだ。
 他の方が同じかどうかはわからないが、
 最近自分自身が特に感じており、

 善意者のみではない、 ということを強く意識する必要を感じている。
 ・・・といってもまだ攻撃を受けたわけではない。
 ただいつでもその可能性はあり、
 それに対して磐石か、といわれれば・・・

 「創る」ことは「守る」ことにもつながり、
 これから少しづつ考えてゆきたい。

 最初に・・・
SQLインジェクション について考える

 仕事の関係で、サイトの脆弱性を見直す段階において
SQLインジェクション対策を行うことがあった。これは、もう
ご存知、WEBアプリケーションに対する攻撃手法のひとつである
SQLインジェクション(SQL Injection) に、出来うる限りの対応
を行うこと・・・なのだが、

 今までの知識や情報から、例によって
 ・フォームからの特殊文字などのエスケープ という基本対策
 ・phpの自動エスケープ機能をオンにすること
 などを行ってきたのだが、

 どうやらこれだけではまったく不十分らしい。

 基本的に、日々のサイト構築作業において、「セキュリティ
リスクに対する対応は、もちろん重要で、完璧(?)にしなくて
はならない事なのだろうが、忙しさや、サイトを見る善意者に甘
えて、ついつい滞り勝ちであった。
 今回、ふとしたきっかけからこのあたりがとても気になり、
少し調べて見ることになったのだ。

まず、基礎的な情報を整理しよう。

◆SQLインジェクション による攻撃
 ・Wikipedia では
 「SQLインジェクション(英:SQL Injection)とは、アプリケ
ーションのセキュリティ上の不備を意図的に利用し、アプリケー
ションが想定しないSQL文を実行させることにより、データベース
システムを不正に操作する攻撃方法」(引用:Wikipedia)
 ということで、
 「インジェクション(injection)」は、
  ・内部に対して何かを注入させること を意味する

 要は
 ・データベースが導入利用されているサイトで
  SQL文を発行・実行する段階で
  特殊な命令を混入させ、データベースを不本意な操作で
  データを破壊したりすること
 だ。

 ちなみに、SQL以外にも インジェクション(injection)を主とす
る攻撃手法で、
 ・OSコマンドインジェクション(シェルに注入・干渉)|;&$`など
 ・XPathコマンドインジェクション(XML検索条件に注入・干渉)
 ・LDAPインジェクションコマンドインジェクション(ディレクトリ)
などもある。
こわいこわい。

 もうずいぶん前のことだが、例の「価格.com」に対する攻撃(2005年)も
このSQLインジェクション攻撃だったらしい。


(例)ログインの際のアカウント・パスワードにより
  認証するような場合、良く使われるSQL文で
Select * From uid = '1234' And upw = 'gggg'
などの時に、攻撃入力として
uid に ' OR t = t " などが同時に渡された場合
SQL文は
Select * From uid = '1234 OR t = t And upw = 'gggg' という形になり
情報が漏洩されることになる 
・・・ などだ。

 良く行われる手法は、
 「入力値を適切にエスケープすること」で、
 意図されたとおりのエスケープを行うこと なのだが・・・

 ' → ''
 \ → \\  など これではどうも不完全のようだ。

 そのあたりは、ほんと感心するが
 多くの専門の識者が ネット上で情報を公開・指南してくれている。
 ありがたいことだ。

http://www.thinkit.co.jp/free/tech/7/5/
http://www.atmarkit.co.jp/fsecurity/column/ueno/42.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20070422/269134/
http://gihyo.jp/dev/serial/01/php-security/0005?page=2


この中で、特にすぐにやってみようと思ったのは
すべての変数をエスケープする対策」だ。
データベースが MySQLであれば
SQL文を生成する場合、
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
などのように
必ず、
SQL 文中で用いる文字列の特殊文字をエスケープ することだ。
http://phpspot.net/php/man/php/function.mysql-real-escape-string.html

ますは
 ここの例にのっているところを完全に行うこと
 からスタートするか・・・



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


 



commentsコメント
comment_post












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

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

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

 

リンク集

 

最近の記事

 

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

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

 

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