2012-01-10 17 views

答えて

4

できることがいくつかあります。

  1. parameterized queriesまたは良いORMを使用して開始します。
  2. C# AntiXSS libraryをご覧ください。
  3. Sanitize入力してください。さらに読みpreventing SQL Injection

    上に読む

SQL注入は、あなたが求めている部分よりも大きいです。あなたは、データベースに出入りするすべてのデータを認識したいと思っています。上記の提案を実装し、あなたはかなりカバーされるべきです。

元の質問(?id=[guid])の件名については、クエリを送信するときにSystem.Guidデータタイプを使用していることを確認する必要があります。 stringNOTの有効なGUIDである場合、問題があることを知っています。要求を完了しないでください(IE:後でリポジトリに要求を送信しないでください)。確かには送信しません。データベースまで)。

0

IDのように聞こえます。それが簡単だった場合は、内容を数値にキャストしてから、この型付き変数を使用してください。コンテンツに何か他のものがある場合、システムはただエラーを返します。

+0

することは同じでは 'System.Guid'で行うことができます –

0

最初にすべきことは、SQLインジェクションを不可能にすることです。私の理解では、このアプローチではSQLインジェクションは発生しません。これは「パラメータ化された入力」と呼ばれます。

string commandText = "UPDATE Sales.Store SET Demographics = @demographics " 
    + "WHERE CustomerID = @ID;"; 
SqlCommand command = new SqlCommand(commandText, connection); 
    command.Parameters.Add("@ID", SqlDbType.Int); 
    command.Parameters["@ID"].Value = customerID; 

    // Use AddWithValue to assign Demographics. 
    // SQL Server will implicitly convert strings into XML. 
    command.Parameters.AddWithValue("@demographics", demoXml); 

2番目の方法は、GUIDをURLに渡さないことです。これにより、変更が非常に簡単になるため、この値をGETの代わりにPOSTに渡すことができます。これにより、SQLインジェクションからの保護はできませんが、少し難しくなり、データの整合性を確保するのに役立ちます。

詳細情報:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

1

シンプル。 入力を常にサニタイズします。暗黙のうちに、外部ソース(ユーザー、クライアントマシンなど)から受信したものを絶対に信頼または実行しないでください。

GUIDの場合、文字列の代わりにSystem.Guidデータ型を使用します。つまり、SQLクエリでそれを使用する場合は、GUIDの文字列表現をクエリに連結するだけではありません。 query parametersを使用し、受け取った文字列から作成された実際のSystem.Guidオブジェクトを渡します。

文字列の解析時に実際にSystem.Guidを作成できない場合は、入力が無効であることを示します。その時点で、SQLクエリを作成しようとすることや、データアクセスレイヤーを何らかの方法で使用しようとするだけで、ユーザーにエラーを返しても構いません。

0

IDクエリ文字列パラメータの値を直接データベースに渡さないでください。

C#を使用しているため、クエリーパラメータなどのエンティティフレームワークなどのデータを使用して、データがSQL Server用に正しくフォーマットされるようにすることができます。ただし、有効なGUIDかどうかは確認できません。 SQLインジェクション攻撃の詳細については、クエリタイプ軍)

、ここで私は何年か前に書いた記事です:http://colinmackay.co.uk/blog/2005/04/23/sql-injection-attacks-and-some-tips-on-how-to-prevent-them/

関連する問題