2012-09-12 11 views
9

bindParam/bindValueのようにSQLインジェクションから保護しますか?

答えが「はい」の場合、bindParam()/bindValue()/execute()はSQLインジェクション攻撃に対して脆弱ですか?あるいは私はそのような攻撃を防ぐために対策を講ずる必要がありますか?

助けてくれてありがとうございます。

答えて

0

はい、同じことをします。基礎となるSQLエンジン自体が脆弱である可能性があるため、脆弱だとは言えません。しかし、それは本当にあなたの手にはもうありません。

すべての実用的な理由から、はい、安全です。

編集:PHP Documentation(1番目と2番目の例)をご覧ください。 1つはbindParam()で、もう1つは​​です。

2

execute($input_parameters)までは別々のbindParam/bindValue/executeステップと同じくらい安全ですが、答えは基本的にははいと思われます。

ただし、PDO::prepareコールに渡すクエリ文字列をどのように構築したかによって、さらに対策する必要があります。準備されたクエリ文字列のすべてをパラメータ化することは必ずしも可能ではありません。たとえば、表または列名にはパラメータを使用できません。ユーザーデータまたは外部データをそのクエリ文字列に使用できるようにする場合は、文字列をprepareに渡す前にそのデータをサニタイズする必要があります。 詳細は、これらのstackoverflowの質問を参照してください:一般的に

は、とにかくすべての入力データをフィルタリングする必要があり、あなたがいずれかをサニタイズ可能性が余分に安全になりたかったので、もし必要に応じて適切なフィルタを使用してSQLタイプのものを対象とするデータを入力したり、必要に応じてFILTER_CALLBACKカスタム関数を記述することもできます。 ユーザーが提供するデータから得られるテーブル名または列名の場合、一般的な検証方法は、許容可能な名前の配列に対して値をチェックすることです。

これが役に立ちます。がんばろう。おげんきで! ;)

関連する問題