はbindParam/bindValue
のようにSQLインジェクションから保護しますか?
答えが「はい」の場合、bindParam()/bindValue()/execute()
はSQLインジェクション攻撃に対して脆弱ですか?あるいは私はそのような攻撃を防ぐために対策を講ずる必要がありますか?
助けてくれてありがとうございます。
はbindParam/bindValue
のようにSQLインジェクションから保護しますか?
答えが「はい」の場合、bindParam()/bindValue()/execute()
はSQLインジェクション攻撃に対して脆弱ですか?あるいは私はそのような攻撃を防ぐために対策を講ずる必要がありますか?
助けてくれてありがとうございます。
はい、同じことをします。基礎となるSQLエンジン自体が脆弱である可能性があるため、脆弱だとは言えません。しかし、それは本当にあなたの手にはもうありません。
すべての実用的な理由から、はい、安全です。
編集:PHP Documentation(1番目と2番目の例)をご覧ください。 1つはbindParam()
で、もう1つはです。
execute($input_parameters)
までは別々のbindParam/bindValue/execute
ステップと同じくらい安全ですが、答えは基本的にははいと思われます。
ただし、PDO::prepare
コールに渡すクエリ文字列をどのように構築したかによって、さらに対策する必要があります。準備されたクエリ文字列のすべてをパラメータ化することは必ずしも可能ではありません。たとえば、表または列名にはパラメータを使用できません。ユーザーデータまたは外部データをそのクエリ文字列に使用できるようにする場合は、文字列をprepare
に渡す前にそのデータをサニタイズする必要があります。 詳細は、これらのstackoverflowの質問を参照してください:一般的に
は、とにかくすべての入力データをフィルタリングする必要があり、あなたがいずれかをサニタイズ可能性が余分に安全になりたかったので、もし必要に応じて適切なフィルタを使用してSQLタイプのものを対象とするデータを入力したり、必要に応じてFILTER_CALLBACKカスタム関数を記述することもできます。 ユーザーが提供するデータから得られるテーブル名または列名の場合、一般的な検証方法は、許容可能な名前の配列に対して値をチェックすることです。
これが役に立ちます。がんばろう。おげんきで! ;)