私はMSSQLデータベースへの接続にADOdbを使用しています。 SQLインジェクションを防ぐのに十分なのでしょうか?これは安全ですか? ADOdb準備文
私が使用していますプリペアドクエリは次のとおりです。
$db = ADONewConnection('odbc_mssql');
$dsn = "Driver={SQL Server};Server=SERVNAME;Database=DBNAME;";
$ADODB_COUNTRECS = false;
$db->Connect($dsn,'LOGIN','PASS');
$sql = 'SELECT login, etc FROM users WHERE login ='.$db->Param('0').' AND pass ='.$db->Param('1').'';
$stmt = $db->Prepare($sql);
$stmt = $db->Execute($stmt,array("$user_id","$psw"));
ORあなたはおそらくPDOへの切り替えをお勧めですか?
あなたの推論から1あなたが適切に問題を理解していると言うことはできません。 1.一重引用符は保護しません。あなたの例のクエリは、それらがなくても失敗するだけです(正真正銘の 'name'フィールドには何らかの文字が含まれていると仮定します)。 2。エスケープすると、該当する場合は、「クエリロジックを悪意のある方法で変更する人々から保護します」と確信しています。私はADODBの準備文の中に何が入っているのか分からないが、(少なくとも互換性のために)それは同じ古き良きエスケープだと思う。 4.フィールド名を動的に追加する必要がある場合は、優れた実践例のいずれも示していません。 –
違反行為をしないでください。私はその問題に集中しています。外見ではなく、一部の言い回しが無礼であると感じる場合は、意図的にではありません。 –
私は建設的な批判を気にしない:) 1.あなたは正しい、私の間違いは、IDではない名前でなければなりません。 2.エスケープに関しては、実際には私の結論ではありません。http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallaciesスライド47を見てください。3.私はあまりよく分かりませんが、準備された照会は通常の照会とは少し異なります。 4.フィールド名を動的に挿入するには、同じビデオ 'SQL Injection Myths&Fallacies'で提案されている「ホワイトリスト」アプローチを使用します。例を含める必要があります。 – GEMI