2012-02-28 7 views
1

phpとmysqlを使ってWeb上のデータベースでコーディングする場合、データベースに挿入する前にデータをサニタイズする必要があります。誰かが引用符などをエスケープしないようにする必要があります。それは自動的に消毒するのですか?それとも不必要なのですか?データベースのサニタイズ

+2

参考までに、単語は墨塗りです – xbonez

+1

haha​​はい、申し訳ありません。ワードは二階にスクランブルしています:) – bwoogie

+0

Heh、私は "DROP DATABASE ; :D –

答えて

5

1)はい、プラットフォームを必要とせず、信頼できないソース(ユーザー、別のシステム、別のアプリケーションなど - アプリケーションにハードコードされていないもの)からの入力をすべて消毒する必要があります。

2)はい、SQLiteデータベースにアクセスするときは、Androidでこれを行う必要があります(直接またはコンテンツプロバイダ経由)。

3)データベースへのSQLコマンドで入力をサニタイズする必要がありますが、すべての形式のSQLインジェクションを防ぐことはできません。これを防ぐための最善の戦略は、パラメータ化されたクエリを使用することです。これにより、データとは何かを意味するものとコマンドであるものとを区別することができるため、不正な入力が入り込んでSQLコマンドがデータデータベースはそれらをデータとして扱うことを知っています。標準のJavaコーディングでは、PreparedStatementsを使用します。 SQLite/Androidでは、データのプレースホルダ(信頼できない入力から派生したもの)を使用してクエリを作成し、bindStringを使用してこれらのプレースホルダを設定すると、compileStatementを使用する必要があります。

これについての詳細は、OWASP SQL Injectionライトアップをご覧ください。

+0

データのサニタイズ方法について教えてください。 あなたの答えは "_In SQLite/Androidでは、データのプレースホルダ(信頼できない入力から派生したもの)でクエリを作成し、それらのプレースホルダを設定するためにcompileStatementを使用する必要があります._"コンテンツプロバイダメソッドdelete()、query、update()など? – Priya

1

これはインターネットを含む他の場所でも同様に同様に適用されます。

あなたが本当に注意する必要があることは、コンテンツプロバイダへのあなたの入力です。一般的に、コンテンツプロバイダはコンテンツプロバイダを作成し、それらを使用して他のユーザーが自分のアプリとインターフェースできるようにします。しかし、通常、フードの下では、ContentProviderはデータベースへのインタフェースとして機能します。これは、あなたがアプリのコンテンツプロバイダに電話上の他のアプリからアクセスできるようにする場合には特に注意する必要がある場所です。

はい、ユーザーがデータを入力できる他の場所でも、注意する必要があります。これには、編集可能なテキストフィールド、インターネットからダウンロードするもの、基本的に信頼できないものなどが含まれます。

汚染分析TaintDroidを実行するプロジェクトがありますが、それはシステムフォームとしてのみ存在します(つまり、すべてのシステムで利用可能なランタイム変更に基づいて動作します)。しかし、現在何が行われているのか、この問題を防ぐのに役立つデータの流れを追跡するための研究プロジェクトがいくつかあります。 (Scandroid [1]いくつかの1名に。)

[1] SCanDroid:Androidアプリケーションの自動化されたセキュリティ認証、 www.cs.umd.edu/~avik/papers/scandroidascaa.pdf

関連する問題