大手IT企業の面接にてPHPの関数のこと聞かれた

中途面接にて聞かれたこと。

セキュリティの話になり、どのような対処をしていたかという話になりました。

IDやPWをフォームに入力した際に、そのまま入力されたフォームの値を利用すると

SELECT * FROM member_table WHERE ID=’$id’ AND PASS=’$pass’;

というクエリの場合に、

SELECT * FROM member_table WHERE ID=’hogeid’ AND PASS=’hogepass’;

と入力され、特定のユーザの情報を引っ張ってこれると思うが、

たとえば、IDの部分に「’ OR 1=1 OR ID=’」と入力されると、

SELECT * FROM member_table WHERE ID=” OR 1=1 OR ID=” AND PASS=’hogepass’;

となり、どんなデータでも引っ張ってこれてしまうという恐ろしい事が実行できてしまいます。

まあ、セキュリティも何も無いって感じですね。

これを防ぐ為に、入力値のチェックをしなければならないのですが、

一番簡単な方法としては、シングルクォートを取ってしまうという事。

preg_replaceを利用して、文字を置き換えるのは一つのやり方として、

「もともとPHPの関数でそうゆうの用意されてるよね?」って聞かれた。

答えれませんでした\(^o^)/

たぶんこれのことよね。

このaddslashes関数をかませることで、「’」文字を削除するのではなく「\’」として検索させるのです。

SELECT * FROM member_table WHERE ID=’\’ OR 1=1 OR ID=\” AND PASS=’hogepass’;

※PostgreSqlでは”って書かないとダメだっけ?

もしかしたら、IDや名前に「’」を使ってる人がいるかも知れませんもんね。

というわけで、自分へのメモってことで。

○| ̄|_  あー!下手こいたー! 〇∧〃
/ >  でもそんなの関係ねぇ!
< \  そんなの関係ねぇ!

〇/ はい!
/|    オッパッピー!!
/>

 

関連PHP関数


投稿日

カテゴリー:

,

投稿者:

タグ:

コメント

“大手IT企業の面接にてPHPの関数のこと聞かれた” への1件のコメント

  1. nullyのアバター

    それを聞く会社もすごいっすね・・・
    超簡潔にするならユーザーにシングルクオートを入力させないことでしょうけど、addslashes()等で'を追加するのもいいかと思います。
    それじゃないんだよなぁ!とかいわれたらプリペアドステートメント使ってくださいみたいなことでも・・・

コメントを残す

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