[PHP-users 24234] Re: クロスサイトスクリプティングとSQLインジェクションの防止策

Takashi Hagiwara hagiwara @ access-system.co.jp
2005年 1月 27日 (木) 10:49:13 JST


こんにちは。萩原と申します。


>まずXSSについてですが、XSSはユーザーが入力した値をHTMLに組み込
>んで返すときに起きると理解しています。私が現在取り組んでいる案件
>ではそのような処理がいくつかあるのですが、ユーザーが入力した値は
>そのユーザーしか見られないようになっています。ユーザーのなりすま
>しなどの危険性を考えない場合、つまりユーザーAが入力した値はユー
>ザーAしか見ないことが保障されているのならば、XSSの問題は存在し
>ないと考えてよろしいのでしょうか。
>またユーザーAの入力した値($a)をユーザーBに表示する場合PHPの関数
>htmlspecialcharsを使用して表示すればそれのみでXSSの危険は完全に
>防止できるのでしょうか。
XSSは、ユーザーごとの処理云々として考えるのではなく、「変数に入れた値を
HTMLで表示する」という処理に対しては、必ず入れておくようにしています。
使う関数は、基本的に「htmlspecialchars」でOKと思います。


>次にSQLインジェクションの防止策についても教えてください。ユーザー
>の入力した値をもとにデータベース(私はPostgreSQLを使用しています)
>を検索する処理を行っています。ユーザーの入力した値は下記のような
>SQLで利用しようと考えています。
>
>$value = $_REQUEST['value'];
>pg_query($connection, "select * from table1 where column1 = '$value'");
>
>このとき$valueに'(シングルクォーテーション)が入っているとSQLイン
>ジェクションの危険があるので、$valueをサニタイジングしなければいけ
>ないと思います。
>
>PHPの関数を眺めるとaddslashesという関数が見つかりシングルクォー
>テーションをクォートしてくれることが期待できます。$valueを
>$value = addslashes($value)とすれば上記のSQLにおいてはSQLインジェク
>ションを完全に防止することができるのでしょうか。
postgreSQLでしたら、PHPとpostgreSQLのバージョンに制限はありますが、
「pg_escape_string」もあります。
http://php.s3.to/man/function.pg-escape-string.html


>ウェブアプリケーション作成の注意点を書いたものはときどき見るのです
>が、PHPでの具体的な処理方法について確認したかったので投稿させてい
>ただきました。もちろん「完全」とか「100%」などと断言することは
>難しいと思いますが、皆様が安全だと確信して行っている処理について教
>えていただければ幸いです。

過去にも話題に上っていますので、ご参考までに。
http://ns1.php.gr.jp/pipermail/php-users/2002-July/008358.html

個人的に参考にしたサイトですが↓
http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html

#関数の具体的な処理でしたら、実際に自分で試してみるのが一番かと思います。


>_______________________________________________
>PHP-users mailing list  PHP-users @ php.gr.jp
>http://ns1.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://www.php.gr.jp/php/novice.php3




PHP-users メーリングリストの案内