PHPのプログラマーに質問です。

開発時にセキュリティ関連の配慮はどのようにしているか
教えてください。
あと失敗談なんかも教えて頂ければと思います。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/10/16 22:39:13
  • 終了:2007/10/23 22:40:40

回答(5件)

id:ymlab No.1

ymlab回答回数506ベストアンサー獲得回数332007/10/16 23:14:24

ポイント20pt

PHPプログラマというほどではないですが・・・・。

開発時は、一番簡単なところでは、

$_REQUEST等で、取得する際、サニタイズすることでしょうか。

また、個人情報などの入力を促す際は、httpsにしておく。

ファイルのアップロードなど、特にファイル処理の場合は、

・ヌルバイト攻撃を避けるために、\0を置換する。

・アップロードしたファイルを読み込む時に、拡張子が、そのサーバで実行できる形式の場合は、拡張子を置換したり、

ダウンロードできる形に設計する。

くらいです。

失敗談。

・サニタイズするための関数をinclude 先のファイルの、さらに先のinclude先のところに定義してあり、

表示時間にロスがあった。

・ファイルをアップロードして、そのままリンクを貼って、表示できるようにしていた。

ある日、phpのソースコードをアップロードして、表示されたリンクをマウス押下したら、

ソースコードではなくて、プログラムが実行されてしまった。

[おかげで、その日一日、別の仕事をしないといけませんでした。]

URLが必須なので、

PHPサイバーテロの技法―攻撃と防御の実際

PHPサイバーテロの技法―攻撃と防御の実際

  • 作者: GIJOE
  • 出版社/メーカー: ソシム
  • メディア: 単行本

を紹介しておきます。

これは、私のレベルでは本当にためになりました。

id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/10/17 11:09:41

ポイント20pt

・register_globals = off

・SQL インジェクション

 SQLに流すパラメータが、POST(GET)データの場合は要注意

http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html

id:minkpa No.3

minkpa回答回数4178ベストアンサー獲得回数552007/10/17 12:54:43

ポイント20pt

http://www.microsoft.com/japan/learning/books/JPN_ViewMsPress.as...

プログラマのためのセキュリティ対策テクニック

id:shotets No.4

shotets回答回数42ベストアンサー獲得回数22007/10/18 10:28:54

ポイント20pt

上記の方々とかぶるかもしれませんが、

  • リクエストはなるべく $_REQUEST ではなく $_GET, $_POST で受け取る。
  • register_globals = off
  • なるべく関数やクラス上で変数を扱い、グローバル変数はなるべく使わない。
  • リクエストをサニタイズする。(<, >, &, など)
  • 半角カナを全角に変換する。
  • その他、入力チェックを細かく行なう。
  • アドレス直打ちで見られないように、非公開ディレクトリに置けるものは置く。
  • 公開ディレクトリにあるものは.htaccessなどで見られないようにする。

などですかね。

http://dummy.jp/

id:wdc No.5

wdc回答回数11ベストアンサー獲得回数02007/10/18 12:35:44

ポイント20pt

最初にphp.iniを確認します。

レンタルサーバだといまひとつな設定の場合がありますので、

それらはスクリプトの先頭かまたは.htaccessで上書きします。

  • register_globals
  • default_charset
  • mbstring.internal_encoding
  • display_errors
  • session.use_only_cookies

この辺を主に確認します。

それからスクリプトを書き始めます。

スクリプトはUTF-8またはEUC-JPにします。


html出力の際に

htmlspecialchars($str, ENT_QUOTES); を必ず使います。


DBに突っ込む前に

mysql_real_escape_string($str); を(MySQLの場合)必ず使います。


で、こいつらはスペルが長くてうっとうしいので、

自前でラッパ関数を用意しておけば多少楽になります。

例えばこんな感じで

// htmlspecialchars 簡略化

function clean($str) {

$str = htmlspecialchars($str, ENT_QUOTES);

return $str;

}


あと、なんだろう。

ここの他の方のレス見て勉強させてもらいます(^^ゞ



PHP と Web アプリケーションのセキュリティについてのメモhttp://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html

サイバーテロ本のほとんどはここのサイトで網羅されています。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません