sql >> データベース >  >> RDS >> Sqlserver

JavaアプリでSQL Serverの特殊文字をキャプチャ/エンコードする方法は?

    次のような方法で SQL を構築していると思います

    String sql ="Column=' のタブから列を選択" + StringParm + "'";   

    またはそれのような何か?それを行うと、あらゆる種類のエクスプロイトに対してオープンになり、結果の文字列が有効な SQL ではなくなった、説明したような動作も表示されます。最初にユーザーが指定したパラメーターをエスケープする必要があります。

    最善の解決策は、PreparedStatements を使用することです。そうしてください

    ステートメント stmt =conn.prepareStatement("Select Column from tab where column=?");stmt.setString(1,StringParam);  

    Javaコードを変更せずに問題を解決する簡単な方法はわかりませんが、コードに到達する前に入力をエスケープ/サニタイズすることはできません(たとえば、Webアプリケーションの場合はjavascript)



    1. 異なるデータベースのテーブルを結合する(PostgreSQL)

    2. C#でのOracleパラメータ化クエリ

    3. WHERE句にパラメータ化された値が含まれている場合にSQLServerがインデックスシークの代わりにインデックススキャンを使用するのはなぜですか

    4. PHPおよびMySQLでSphinxを使用するためのガイド