2


0

mysqlデータベースに値を保存することに関する疑問

正確なユーザー入力をデータベースに保存するか、xssとstoreのためにそれをきれいにする方が良いですか? または、直接ユーザー入力を保存し、きれいにして表示するのは良いですか? 私を案内してください。

ありがとう

1 Answer


4


データベースに正確なデータを保存し、表示する必要がある場合は正しくエスケープすることをお勧めします。 これにより、後で危険なキャラクターとエスケープが異なる可能性のある別のメディアを使用して表示したい場合に、物事がはるかに簡単になります。

また、言語の標準ライブラリが提供するエスケープ関数を使用する代わりに、カスタムの「クリーニング」関数に依存することには、いくつかの問題もあります。

不要な制限-たとえば、常に「

</ code>タグは、あなたが今やったように、サイト上の<code> <script> </ code>タグについて話すことができません。 一部のサイトでは問題ないかもしれませんが、そうでないサイトもあります。</ p> <p> <strong>微妙なバグ</ strong>-独自の「クリーニング」機能を作成すると、考慮していない危険な入力を見逃す可能性があります。 たとえば、<code> <script> </ code>を空の文字列に置き換えますが、ユーザーが<code> <scri <script> pt> </ code>を入力することを忘れると、置き換え後に<code> < script> </ code>。 組み込みのエスケープ関数を使用することは、通常、経験豊富なプログラマーによって(できれば)記述され、適切にテストされ、セキュリティが重要な他の数千のシステムで使用されているため、正常に機能します。</ p> <p> <strong>特殊なケース< / strong>-たとえば、すべての文字列の<code> '<' </ code>および<code> '>' </ code>を削除してから保存する前に、すべての入力を削除する場合は、後で、少なくとも1つの特定のフィールドを削除できないのは、それらの文字がその1つのフィールドで絶対に必要であるため、代わりにエスケープする必要があるためです。 これで、データにエスケープを適用する必要があるかどうかを覚えておく必要がある状況が作成されました。 これにより、間違える可能性が高くなり、エスケープするのを忘れたか、エスケープが不要なフィールドの1つであるかをコードで一目で確認することが難しくなります。</ p>