どうもセキュリティ対策が皆無ながっくんです。
個人としては脆弱性だらけなのですが、運営サイトなどがそれではいけませんよね。
まぁ個人的に一番怖いのは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」が入ります。 プレースホルダの使い方はこんな感じです。
まだまだ学ぶ事はたくさんあるぞ!!
ではでは!
コメント