PHPのSQLインジェクションについて
いる人の記事を見てPHPのSQLインジェクションの対策を取り組むために、「Validate」まで使われたようでした。
本当に「Validate」って何のために存在するもんか全然理解されていなかったな。
今日のプログラムにSQLインジェクションの対策法を取り組んだので、メモしておこう。
本家の記事:
http://php.liukang.com/manual/ja/security.database.sql-injection.php
MySQLならこんな関数があるが↓
http://php.liukang.com/manual/ja/function.mysql-real-escape-string.php
僕はMySQLが(主観的に)嫌がる人間で、これがいいかも↓
http://pear.php.net/manual/ja/package.database.db.db-common.escapesimple.php
なお、PHP5.Xの場合(4.X上の確認を行っていない)は、コードに
を書いて、ログを出したらこのような文字列になりました
DB_common::escapeSimple()を適用したらこんな文字列になりました
とは言え、PHP5.X上にSQLインジェクションの攻撃は簡単に出来ません。プログラマは安心するために、DB_common::escapeSimple()を使えば無難でしょう。
以上!
本当に「Validate」って何のために存在するもんか全然理解されていなかったな。
今日のプログラムにSQLインジェクションの対策法を取り組んだので、メモしておこう。
本家の記事:
http://php.liukang.com/manual/ja/security.database.sql-injection.php
MySQLならこんな関数があるが↓
http://php.liukang.com/manual/ja/function.mysql-real-escape-string.php
僕はMySQLが(主観的に)嫌がる人間で、これがいいかも↓
http://pear.php.net/manual/ja/package.database.db.db-common.escapesimple.php
なお、PHP5.Xの場合(4.X上の確認を行っていない)は、コードに
$sql = "SELECT SEQUENTIAL_ID, LOAD_FLG, FILE_NAME, FORMAT_ID, MENU, LETTER, MESSAGE, ".
" VALUE1, VALUE2, VALUE3, VALUE4, VALUE5 FROM TARIM_MENU_LIST_TBL ".
"WHERE SEQUENTIAL_ID LIKE '%".$sequential."'";
を書いて、ログを出したらこのような文字列になりました
SELECT SEQUENTIAL_ID, LOAD_FLG, FILE_NAME, FORMAT_ID, MENU, LETTER, MESSAGE, VALUE1, VALUE2, VALUE3, VALUE4, VALUE5 FROM TARIM_MENU_LIST_TBL WHERE SEQUENTIAL_ID LIKE '%200610_02\' OR \'1=1'
DB_common::escapeSimple()を適用したらこんな文字列になりました
SELECT SEQUENTIAL_ID, LOAD_FLG, FILE_NAME, FORMAT_ID, MENU, LETTER, MESSAGE, VALUE1, VALUE2, VALUE3, VALUE4, VALUE5 FROM TARIM_MENU_LIST_TBL WHERE SEQUENTIAL_ID LIKE '%200610_02\'' OR \''1=1'
とは言え、PHP5.X上にSQLインジェクションの攻撃は簡単に出来ません。プログラマは安心するために、DB_common::escapeSimple()を使えば無難でしょう。
以上!
コメント
コメントを投稿