2

PHPからsqliteに入る入力をサニタイズする方法を見つけようとしています。mysqlが使えません。単に sqlite_escape_string を使用するだけで十分ですか、それとも他に何かする必要がありますか? また、sqlite2しか使用できません。

4

5 に答える 5

2

SQL インジェクションを回避する最善の方法は、パラメトリック クエリの使用を強制し、決して文字列連結や変数補間によって SQL ステートメントを手動で組み立てないことです

PHP 5+ では、(とりわけ) SQLite をサポートするマルチデータベース抽象化レイヤーである PDO とパラメトリック クエリを使用できます。

于 2011-08-15T20:42:35.277 に答える
1

エスケープ関数は、SQL 方言で使用される特殊文字 (主に引用符) がエスケープされていることを確認して、挿入/更新などが機能するようにします。sqlite_escape_string が行うことは、一重引用符をエスケープすることだけです。

次に、誰かが SQL インジェクションを作成できるのではないかという大きな懸念があります。v2 を使用しているため、保護する prepare 関数と _bind() 関数を使用できません。

SQLite では、「;」で区切られたコマンドをチェーンできます そこで問題があります。作成したヘルパー関数または sprintf を使用してパラメーターを慎重に作成することから始め、int、float、および文字列を適切に入力していることを確認することをお勧めします。

注意したいことを「エスケープ」する独自のエスケープ関数を作成できるはずです...最も具体的には、クエリの最後に ... ESCAPE '\' を使用してセミコロンを使用します。あなたのエスケープ文字として。

次に、誰かが悪意のあるコンテンツ (XSS) を意図的に挿入するという問題があります。Grigor は 1 つの解決策を提供しました。文字列に対して htmlentities() を使用することです。

于 2011-08-15T21:10:11.237 に答える
0

方法はありますが、入力の対象によって異なります。理解を深めるために、この質問を参照してください: PHP でユーザー入力をサニタイズするための最良の方法は何ですか?

于 2011-08-15T20:40:44.990 に答える
0

sqlite_escape_string()文字列を入力するために必要なすべてのサニタイズを行う必要があります。出力に関しては、HTMLに出力する場合は、htmlspecialcharts()出力する前に使用してください。

于 2011-08-15T20:40:47.680 に答える
0

SQLite はそれを提供しますsqlite_escape_string()。ただし、PHP 5 でのみ使用できます。

ただし、これらの方法だけに頼っていても、注射から逃れることはできません。必須の対策は、ユーザーが提供した入力を最初に検証することです。メソッドを適用する前に、信頼する必要がありますが、実際には作成していません。

于 2011-08-15T20:41:20.763 に答える