2008年2月 3日

[PHP-users 33233] Re:SQLインジェクションの可能性

こんばんは。

> ・PHP5系
> ・Windows2000サーバ
> ・MS SQL Server
> ・IIS

私もWEBサーバ以外が同じ環境で開発したことがありますが、

PHPのMSSQLサーバ関数にはエスケープする関数がなかったのと
DBサーバに依存しないプログラムにしたかったために
PDO関数を使用して、Prepared Statementにて記述しました。

仮にhtmlspecialchars関数を用いると
入力されたサイズと格納するサイズが変わってしまいますので
入力フォームで最大長入力された場合にオーバーフローしてしまいます。

また、これは私が今回ハマった問題なのですが、
SQLServerでncharやnvarchar型を使用している場合、
前述したPDO関数では抽出した後に文字コード変換が必要になってしまいます。

今回は、WindowsのCOMからADODBを使用する方法で
なんとか解決しましたので、今後のデータベース拡張を考えるなら
PDO関数ではなくCOMを使用したADODBをお勧めします。
(なかなか情報が掲載されているサイトはありませんが)


新垣友孝 wrote:
> 成田 実さん返信ありがとうございます。
>
> > まずはデータベースは何を利用しているのか、
> > PHPのバージョンは4系なのか5系なのかを明記してください。
> すみません。初歩的な部分ですよね。
> 例を挙げてみますね。
>
> ・PHP5系
> ・Windows2000サーバ
> ・MS SQL Server
> ・IIS
>
> といった環境でHTMLフォームからの入力をデータベースに
> 格納するといった感じの場合です。
>
> $val=htmlspecialchars($_POST['input'],ENT_QUOTES,'SJIS');
> $query = "SELECT * FROM table1 WHERE userID= '$val'";
>
> userIDとはしてますがデータは可変長のテキスト型と思ってください。
> 文字列の長さはある程度制限するとして、$_POST['input']の内容は
> クオートがあれば実態参照に変換されているのでクエリーが改ざん
> (SQLインジェクション)される事はないのだろうか?
> 他にエスケープする必要性はないのだろうか?
>
> 格納したデータはHTML表示用に利用するため"'<>&等は
> htmlspecialcharsで変換されたままで構わない状況下での話しです。
>
> といった質問内容です。言葉足らずで度々すみません。
>
> 再びよろしくお願いします皆様。
>
> ---------------------------------------------
> 新垣友孝
> _______________________________________________
> PHP-users mailing list PHP-users@xxxxx
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2008年2月 3日 23:09
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69443
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。