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

■PHPでMysqlと接続する時の質問です。セキュリティー面で添削、指摘して下さい。
PHPを勉強中です。現在下記のような記述でMysqlへのデータの出し入れを行っております。
セキュリティー面などで、考慮する点などありましたらご指摘下さい。


■データを入力する時
if ($_SERVER["REQUEST_METHOD"]=="POST"){
if (isset($_POST["hoge"])){

$hoge = htmlspecialchars($_POST["hoge"], ENT_QUOTES);

if($hoge == ""){ //変数内容に合わせてチェック
$error[] = "未入力";
}

if($error == ""){
//DBに登録
$sql = sprintf("INSERT INTO hoge (hoge) VALUES('%s')",$hoge);
$mysql->query($sql); //接続クラスで、mysql_query();
}
}
}


■データを取得する時
if ($_SERVER["REQUEST_METHOD"]=="GET"){
if (isset($_GET["hoge"])){

$hoge = htmlspecialchars($_GET["hoge"], ENT_QUOTES);

$mysql->query("SELECT * FROM hoge WHERE hoge = '$hoge'");
$row = $mysql->fetch(); //接続クラスで、mysql_fetch_array();

echo $row['hoge'];//書き出し
}
}

●質問者: やまねこ
●カテゴリ:インターネット ウェブ制作
✍キーワード:DB echo hoge MySQL PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●35ポイント

(1)クロスサイトスクリプティング

まあ、とりあえず htmlspecialchars で・・・。


(2)SQLインジェクション

もしも $hoge が a'),('b'),('c だったら、

INSERT INTO hoge (hoge) VALUES ('a'),('b'),('c')

もしも $hoge が $hoge' OR '' = ' だったら、

SELECT * FROM hoge WHERE hoge = '$hoge' OR '' = ''

などなど・・・

SQLに渡すに相応しいデータかどうかを詳細にチェックしないと、

情報改ざんや情報漏洩を起こしてしまいかねず、かなりの注意が必要。


この関数だけで対処できるという便利なものは存在しないけど、少なくとも

PHP: mysql_real_escape_string - Manualは必須。


いきなりは難しいと思うので今は言葉だけでも良いと思いますが、

バインド(事前にSQLを動かす準備だけをMySQLに行わせ、パラーメータは後から渡す

という手法のためSQLインジェクションの危険性はかなり軽減される)を使うなども、

検討する場面があるかもしれません。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 11.1.7.1 mysql_prepare()

(MySQL側はちょっと前からサポートしてますが、

レンタルサーバではphp側がサポートしていない可能性あり。)


(3)横入り禁止

GETよりPOST、POSTよりセッションなど外部から出来るだけ操作し辛くする。


こまごま言い出したら長くなるので、以上とりあえずとなりますが、

IPA セキュア・プログラミング講座:Webアプリケーション編は、

一通り理解するようにしてください。

◎質問者からの返答

ありがとうございます!「IPA セキュア・プログラミング講座」も読みます。


2 ● scrap49
●35ポイント

htmlspecialchars()ではなくmysql_real_escape_string()を使いましょう。

pearでMDB2を導入してプリペアードステートメントを使用すると楽ちんです。

DBとやりとりする際はmysql_real_escape_string()でエスケープ

HTMLとかに出力する際はhtmlspecialchars()でエスケープ


そのまんまの回答が以下のURLで

http://q.hatena.ne.jp/1220003768

◎質問者からの返答

ありがとうございます。参考になります!

関連質問


●質問をもっと探す●



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