COLUMNブログ

がっくん │ 2014/03/03 │ 制作現場から

セキュリティ対策はきっちりと

どうもセキュリティ対策が皆無ながっくんです。

個人としては脆弱性だらけなのですが、運営サイトなどがそれではいけませんよね。

まぁ個人的に一番怖いのはSQLインジェクションでしょうか。

データベースに問合せを行う際に,ユーザ入力を工夫して不正なSQL文を与え,データを不正に取得したり書き換えたりすることですね。

簡単な例をあげてみます。

 

ユーザーから文字列「鈴木」が渡されたとき、以下のようなSELECT文を発行することにします。

 

SELECT * FROM users WHERE username LIKE ‘%鈴木%’;

 

ユーザーが入力した文字列が「鈴木」であれば、上記のSELECT文は意図した通りの動きをしてくれます。

しかしユーザーが 「x’; SELECT password FROM users — 」と入力した場合には。。。

どえらい事になります。

 

SELECT * FROM users WHERE username LIKE ‘%x’; SELECT password FROM users — %’

 

2つのSELECT文(とコメントアウト)を実行するSQLになり、非常に危険な結果を返すことになってしまいます。

 

じゃあどすればええねん!!!!!

 

そんな時には私が作成したこのスクリプトを購入….

といった詐欺話はおいといて

 

プレースホルダを使います。

 

プレースホルダとは、SQL 文の中で可変な項目を後から変更可能なパラメーターとして処理する方法です。

SQL文作成時に、 実行時に値が決まる部分を「?」に置き換えて

「?」に当てはめたい値を変数とか配列で指定します。

そうすると、SQLインジェクション対策のためのエスケープ処理を自動で行ってくれます。

————————————

 $id = 2; $sql = select * from t_bbs where id = ?;

 query($sql, $id);

————————————

「?」のところに「2」が入ります。 プレースホルダの使い方はこんな感じです。

まだまだ学ぶ事はたくさんあるぞ!!

ではでは!

トップへ