SQLを安全に保つこと

金曜日 , 3, 5月 2019 Leave a comment

フォームに入力された内容をそのまま信用してはいけないそうです。ユーザーが誤って情報を入力することもあるかと思います。また、SQLをあえて壊して情報を盗み出そうとしたり、破壊しようと試みる「SQLインジェクション」と呼ばれる攻撃にさらされることもあるそうです。このような情報は「サニタイズ」(無害化)とい作業を行う必要があるそうです。PHPでMySQLをサニタイズする場合に使えるのが「mysql_real_escape_string」とうものだそうです。サニタイズというものをしていなかったら「passwordフィールドが空か、または空が空の場合」という条件のSQLが出てきたりするそうです。これはSQLとしてかなり危険なことだそうです。「SELECT * FROM test_table WHERE password=’ ‘ OR ‘ ‘ = ‘ ‘」 というSQLになるそうです。「空が空」というのはちょっと見するとよく分からないですが、これが必ず当てはまってしまうのだそうです。これが「OR」の論理演算子で繋がれているため、すべてのレコードが条件に当てはまってしまうそうです。こうして、パスワードでの検査が無駄になってしまって、すべての情報が盗み出されてしまうという危険があるそうです。「mysql_real_escape_string」というファンクションで、この文字列を無害化するそうです。これは「’」にバックスラッシュ(または円記号)を付加することで記号としての機能を打ち消してくれているそうです。このファンクションは「”」や改行記号など危険な文字をいずれも無害化してくれるそうです。必ず付加する必要があるそうです。

Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です