0

誤って文字列をダブルエスケープした場合、DBに損害を与える可能性がありますか?

この質問の目的で、ストアドプロシージャやパラメータ化されたクエリを使用していないとしましょう。

たとえば、次の入力を取得したとします。

ボブの自転車

そして私はそれを逃れる:

ボブの自転車

しかし、私のコードはひどいものであり、再びそれを回避します:

bob\\\の自転車

これをDBに挿入すると、DBの値は次のようになります。

ボブの自転車

これは私が望んでいることではありませんが、DBに害を及ぼすことはありません。他のすべての必要なセキュリティ対策を講じていると仮定して、二重にエスケープされた入力がDBに悪意のあることをする可能性はありますか?

4

2 に答える 2

1

他のすべての必要なセキュリティ対策を講じていると仮定します

SQLやパラメータ値をアプリケーションにハードコーディングすることは、「必要なセキュリティ対策を講じている」とは決して考えるべきではありません。SQLインジェクション攻撃(Webアプリケーションの場合)に常にさらされるからです。

可能であればストアドプロシージャを使用するのが最善であり、それがオプションでない場合は、少なくともパラメータ化されたクエリを使用する必要があります(バインド変数はこれの別の用語です)。

しかし、あなたの質問に答えるためbob\'s bikeに、データベースに保存すること自体は害を及ぼすことはありませんが、上記の他の点を考慮するように注意してください。これらはセキュリティの観点から非常に重要です。

于 2010-03-30T01:22:53.980 に答える
1

シングルエスケープは、セキュリティの観点から、ダブルエスケープと同じくらい有害/無害です。

最大の問題は、ダブルアンエスケープする必要があるということです。それ以外の場合、エスケープを1回だけ実行すると、データベース出力に円記号が含まれることになります。

たとえばbob\\\'s bike、unescape()関数を実行すると、出力bob\'s bikeされ、再度エスケープを解除しない限り、ページに出力されます。ただし、意図的なバックスラッシュを削除できる(場合によってはさらに害を及ぼす可能性がある)ため、何度もエスケープを解除しないでください。

この質問は、PHPの魔法の引用機能と偶然に関係がありますか?ちょっと興味があるんだけど...

于 2010-03-30T01:26:07.760 に答える