私はSQLクエリであるテキストを持っています。このテキストにはselect文しか含めることができません(必ず "select"で始まる必要があります)。SQL SELECT-onlyクエリのテキストの検証
テキストは、いかなる方法でもDBを変更すべきではありません。私はそれを検証することができます(それが私のDBに影響を与えないようにし、そこからデータを取り出すだけです)?
私はJava with mySQLを使用しています。
ありがとうございます。
私はSQLクエリであるテキストを持っています。このテキストにはselect文しか含めることができません(必ず "select"で始まる必要があります)。SQL SELECT-onlyクエリのテキストの検証
テキストは、いかなる方法でもDBを変更すべきではありません。私はそれを検証することができます(それが私のDBに影響を与えないようにし、そこからデータを取り出すだけです)?
私はJava with mySQLを使用しています。
ありがとうございます。
正規表現を使用してこれを行うことができます。
String yourQuery = "SELECT";
if(Pattern.compile("SELECT .*").matcher(yourQuery).find())
{
// do stuff
}
もし私が 'しばらく 'したらどうしたらいいのですか? DELETE FROM ... '? :D – gustavohenke
あなたは、新しいユーザーとGRANT
それSELECT
権限のみを作成することを検討すべきです。そうすれば、SQL問合せを解析してデータベースを変更できるかどうかを確認する必要がなくなります。
一方、クエリがselect
で始まる場合、selectにはネストされた更新や削除が含まれないため、データベースを変更することはできません。
良い点 - 一般的な文を片側に許可してから、セキュリティ上の制約をプログラマチックに確認しないでください。ドッグボーンが述べたように、データベースユーザの権限を確保して文を保護してください。本当に一般的なステートメントをチェックしたい場合、私はあなたが許可したくないすべてのキーワードの解析を提案します。 –
[startsWith(str)]を使用するのが最も簡単な方法です(http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#startsWith(java.lang.String) )Stringクラスのメソッドです。 –
私はネストされた選択肢を持つことができます。 – Sergiu
文字列が特定の接頭辞で始まるかどうかをチェックします。だから私はあなたがちょうどクエリが '選択'の単語で始まるかどうかをチェックしたい場合は、サブセレクトは問題ではないと思う。 –