2011-08-15 8 views
2

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

+0

http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – DrDol

答えて

0

sqlite_escape_string()は、すべてあなたが入力した文字列を必要とする消毒行う必要があります。出力する場合は、HTMLに出力する場合は、出力する前にhtmlspecialcharts()を使用してください。

0

SQLiteはsqlite_escape_string()を提供しています。 PHP 5でしか利用できません。

これらの方法に頼るだけでは、注射からあなたを救うことはできません。命令には、が常にになります。メソッドに従う前に、ユーザー提供の入力が最初に検証されてから、依存する必要がありますが、実際には作成されていません。

2

SQLインジェクションを避ける最も良い方法は、パラメトリッククエリの使用を強制することです。は、文字列連結または変数補間によって手動でSQL文を手動でアセンブルすることはありません。

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

1

エスケープ関数は、SQLダイアレクトで使用される特殊文字(主に引用符)がエスケープされていることを確認し、挿入/更新などが機能するようにします。すべてのsqlite_escape_stringは単一引用符でエスケープします。

それで、誰かがSQLインジェクションを手掛けることができるという実質的な懸念があります。 v2を使用しているため、あなたを保護するprepare関数と_bind()関数を使用することはできません。

SQLiteでは、 ';'で区切られたコマンドを連鎖させることができます。だからそこに問題がある。まず、ヘルパー関数を使ってパラメータを作成するか、sprintfを使ってパラメータを慎重に作成し、int、float、およびstringを適切に入力することをお勧めします。

注意したいものを「エスケープする」独自のエスケープ機能を作成することができます。最も具体的には、セミコロンを使用します。ESCAPEクエリの最後に '\'エスケープ文字としてバックスラッシュを使用します。

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

関連する問題