人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP+MySQLで作られたWEBサイトの「セキュリティ」に関する質問です。

とりあえず今持っている知識で以下の対応をしました。

ユーザーからの入力データをextract($_POST)で受け取らない。

ユーザーからの入力データをSQLに渡す場合は全てmysql_real_escape_string処理をする。

ユーザーからの入力データを画面に表示する場合はhtmlspecialchars処理をする。


この3点のみ対処しました。


ただ、もちろん他にも様々な穴があると思います。そこで「こんな対処もしないとダメだよ」といったアドバイスをお願いします。

私の作っているサイト情報を実際に見ないと難しいのは重々承知しておりますが、「一般論」で構いません。総合的に技術を理解している方からのご意見をお待ちしております。

●質問者: tokyosmash
●カテゴリ:インターネット
✍キーワード:MySQL PHP SQL webサイト アドバイス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kidd-number5
●27ポイント

Zend社が指針として出しているレベルは最低限おさえておくと良いのではないかなと思います。

http://www.zend.co.jp/tech/index.php?%A5%BB%A5%AD%A5%E5%A5%EA%A5...

(Zendの認定試験にはこの程度の内容が出題されてましたし)

◎質問者からの返答

ありがとうございます。とりあえず3までは自分で意識しているつもりです。(もちろん穴はあると思いますが)

それより下はほとんど初めてみますね。これから勉強したいと思います。


2 ● studioes
●27ポイント

範囲チェックを行う。

例えば、1ページの表示数で10?50等のリストフォームがあって、これを元に項目を表示する場合、リスト値を書き換えられてマイナスであるとか、大きい数値を送られた場合に、膨大な処理を行うことでシステムの応答速度が低下する恐れがあります(DoS攻撃)

ですので、範囲が10?50などと決まっているのならば、

if($val<1 or 50<$val) die();

等のようにして、想定外の範囲を除去します。

◎質問者からの返答

DoS攻撃ってよく見かけますがそういう事なんですね。検索結果をPear Pagerで制御しようと思っていたのですが、アドバイスを頭に入れて作ります。

もう古い話になるかもしれませんが、WEB2.0の基本的な概念として「ユーザーを信頼する」ってあると思います。とことん性善説ですよね。

でもサイトのバックエンドは全く逆の考え方で作らないといけないんだと認識してきました。アドバイスありがとうございます。


3 ● kidd-number5
●26ポイント

PHPの界隈でセキュリティといえばこの人(と勝手に思ってます)

http://blog.ohgaki.net/

Pear::Auth使っているとの事ですが、

そしたらついでに(?)DB関連もPEAR::DBにしてみたらどうですか?

PEAR::DBのmysqlのクラスでは、内部的にこんな処理が入ってます。

明示的にescapeしなくても、ここを自然に通るようになっています。

 function escapeSimple($str)
 {
 if (function_exists('mysql_real_escape_string')) {
 return @mysql_real_escape_string($str, $this->connection);
 } else {
 return @mysql_escape_string($str);
 }
 }

(というわけで回答二回終わり?)

◎質問者からの返答

なるほど、PEAR::DBはそんなに親切な事をやってくれるんですね。イマイチPEAR::DBを使うメリットというか意味がよくわかってなかったのですが、色々と便利な機能があるのでしょうか。ちょっと探ってみようと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ