-1

次のような発言があります。

SELECT * FROM TABLE WHERE COLUMN = 123456

123456ユーザーによって提供されるため、SQLi に対して脆弱ですが、すべてのセミコロンとブラケットを削除すると、ハッカーが他のステートメント (DROP,UPDATE,INSERTなど) を実行することは可能SELECTですか?

私はすでに準備済みステートメントを使用していますが、入力から行末記号と角かっこが取り除かれている場合、ハッカーは何らかの方法で DB を変更できるのでしょうか?

4

2 に答える 2

7

SQL パラメータを使用します。入力を「サニタイズ」しようとすることは、非常に悪い考えです。いくつかの複雑な SQL インジェクション スニペットをグーグルで検索してみてください。ブラック ハット ハッカーがどれほど創造的であるかは信じられないでしょう。

于 2013-02-25T15:18:03.653 に答える
1

一般に、特定の文字を取り除こうとして、この種の攻撃から安全であることを 100% 確信することは非常に困難です。コードを回避する方法が多すぎます (文字エンコーディングなどを使用するなど)。

より良いオプションは、次のようにパラメータをストアド プロシージャに渡すことです。

CREATE PROCEDURE usp_MyStoredProcedure
    @MyParam  int
AS

BEGIN
    SELECT * FROM TABLE WHERE COLUMN = @MyParam

END
GO

そうすれば、SQL は渡された値をパラメータとして扱います。この場合、いずれにしても int 型の値のみを受け入れます。

ストアド プロシージャを使用したくない、または使用できない場合は、コードを変更して、入力パラメーターに事前定義された文字のリスト (この場合は数字) のみを含めることをお勧めします。そうすれば、値が安全に使用できることを確認できます。

于 2013-02-25T15:25:19.527 に答える