Кoss2件のコメントプログラムを書いていると避けて通れないデータベース回りの脆弱性対策。使っていると、落とし穴だらけって感じですね。PHPはサンプルコードが山ほどWebでも出ていて覚えやすいのですが、動けばOKな安直なサンプルが多いのも困りものです。1;」の部分をPOSTやGET等で外部からの入力として受け取って処理する事になるので、これだとSQLインジェクションを始めとして、やられ放題になります。user_id='”.$userID.”‘”;」と文字列を組み立てたものを「mysql_query」で実行するやり方にある訳です。いう最悪のコードサンプルをいまだに初心者に教えるのはどうかと思うです。世の中に溢れているのは、こういう例ばっかりですね。対策として、フォーム等で受け付ける文字列をサニタイズと称して「エスケープしたり、危険な文字列を削ったり」する手法が紹介されるのですが、何が「危険」になるかはケースバイケースなので、決定打は無し、です(ムキー(笑))。ステートメントとか、プレースホルダとか、バインド機構を使え」と書いてあったりします。組み合わせが避けられている。この手法は決して目新しいものでは無いので、色々なサイトでも触れられているのだけど、なぜか概念の説明やコア部分のコードだけで、イマイチ不親切なものが多い。いうサンプルコードこそ、そのまま動く分かり易いもので初心者に説明すべきだと思うのだけど。なんでだろ?という訳で、上のコードをプリペアド・ステートメント(静的プレースホルダ)式で書き直すとこうなる(はず)。$showMessage;先にSQLを確定しコンパイルしてしまい(プリペアド・ステートメント)、後から変数部分に値だけを配列に束ねて実行する(バインド機構)ため、危険な文字列の挿入等によって(原理的に)SQL文の破壊が発生しないので、より安全。SQLの中に予め変数が入る場所(プレース)を確保(ホールド)しておくので、「プレースホルダ」とも呼ぶようだ。呼び名が色々で分かりにくい。「プレースホルダ」には「静的プレースホルダ」と「動的プレースホルダ」があり、前者が正統「プレースホルダ」で、後者は「なんちゃって」なのだそうな。文字列を動的に組み立てるから脆弱性が入り込むので、「動的プレースホルダ」には何らかの付け入るスキがあると思った方が良さそうだ。false)という部分で、動的プレースホルダ(ATTR_EMULATE_PREPARES)をOFF(false)にしているのは、そういう事なのだそうな。デフォルトがON(true)なのだけど、それだと裏でSQL文を組み立てて=エミュレート(なんちゃって)処理をしてしまうらしい。(^^;変数が1個の場合は「?」だけで十分だけど、複数ある場合は「:value_name」を使うとコードが読みやすくなる。MySQL接続をクローズするこんな感じ。「bindValue」は数値、「bindParam」は文字列を扱う。「PARAM_INT」「PARAM_STR」も型指定なので、きちんと指定する。16:58Naohiro19さん、コメントありがとうございます。コメント頂いたのに気が付かず、ごめんなさい。コメントをキャンセルメールアドレスが公開されることはありません。*サイト下の曲がった2つの単語をスペースで区切ってタイプしてください上に表示された文字を入力してください。