0

一重引用符をエスケープする必要があることはわかっていますが、他に保護すべき文字またはテキスト文字列があるかどうか疑問に思っていました

私はmysqlとh2データベースを扱っています...

4

2 に答える 2

2

すべての上位レベルの言語で使用されているMySQL関数mysql-real-escape-stringを確認すると、奇妙な文字のリストが非常に大きいことがわかります。

  • \
  • '
  • 「」
  • NUL(ASCII 0)
  • \ n
  • \ r
  • Control + Z

PHPのような高ソルブ語ラッパーは、引用符で終わる可能性のある不正な形式のUnicode文字から文字列を保護する場合もあります。

結論は次のとおりです。特に、デバッグが難しく、読みにくく、理解しにくい正規表現では、文字列をエスケープしないでください。組み込みの提供された関数を使用するか、パラメーター化されたSQLクエリを使用します(すべてのパラメーターに、エンジンによってSQLとして解釈されるものを含めることはできません)。これは、h2ドキュメントにも記載されています:h2dbsqlインジェクション保護

上記の問題の簡単な解決策は、プリペアドステートメントを使用することです。

于 2012-09-24T11:52:41.227 に答える
2

これは、ユーザーから取得する必要がある情報の種類によって多少異なります。単純なテキストのみを探している場合は、ユーザーが入力する可能性のあるすべての特殊文字を無視することもできます (それほど問題がなければ)。クエリで意味をなさない文字をユーザーが入力できるようにするのはなぜですか?

一部の言語には、これを処理する関数があります。たとえば、PHP には mysql_real_escape_string() 関数 ( http://php.net/manual/en/function.mysql-real-escape-string.php ) があります。

一重引用符 (') がユーザー入力禁止であることは正しいです。ただし、二重引用符 (") とバックスラッシュ (\) も確実に無視する必要があります (PHP 関数が無視する文字については、上記のリンクを参照してください。これらは最も重要で基本的なものであるためです)。

これが少なくとも良いスタートになることを願っています!

于 2012-09-09T02:39:12.167 に答える