sql
  • vb.net
  • 2017-11-27 10 views 0 likes 
    0

    質問とパラメータによってハッシュバイトと異なるのですか? 私のコードがあるクエリテキストとクエリパラメータの間で異なるハッシュパスワード

    .CommandText = "update table.pass " _ 
    & "set password = convert(varchar(12),HASHBYTES('MD5','" & TextEdit3.Text.ToUpper.ToString & "'),2) where userid='" + USER_ID + "'" 
    

    私の第二のコードは今最初のコードを使用してIAMため

    .CommandText = "update table.pass " _ 
    & " set password = convert(varchar(12),HASHBYTES('MD5',@pass),2) where [email protected]" 
    .Parameters.AddWithValue("@pass", TextEdit3.Text.ToUpper.ToString) 
    .Parameters.AddWithValue("@userid", USER_ID) 
    

    enter image description here

    ある、と私はそれが原因SQLインジェクションに間違っていることを知っています。だから私は2番目のコードを使用したい。結果は最初のコードとは異なります。私が欲しいもの

    は、私は、パラメータを使うのですか、ですが、私の前任者は、私はAddWithValuenvarcharStringのためのデータを前提としていることを信じている最初の1

    +0

    なぜあなたは '' STRING'にToString'を呼び出していますか?もっと重要なことに、なぜあなたは 'ToUpper'に電話していますか?そうすることで、複数の異なるパスワードを同じ値にハッシュさせることになります。 – jmcilhinney

    +0

    @jmcilhinney他のアプリケーションプロジェクトでログインするために 'ToUpper'を使用しています。もし私がこのアプリでログインすることはできません。 'tostring'のために何の問題も生じていないと思います。 – chopperfield

    +0

    'ToUpper'に関して、それがあなたのコントロールを超えているなら、あなたの手は結ばれていますが、それは非常に悪い実装です。そうすれば、パスワード「パスワード」と「パスワード」と「パスワード」はすべて同じと見なされますが、明らかにそうではありません。 'ToString'に関して、それは特に傷ついていませんが、それを使う良い理由はありませんので、そうしてはいけません。私はあなたのコードを破ることのないたくさんのことを考えることができますが、 'String'の' ToString'のように無意味なので、あなたがそれらのどれをしても見ません。 – jmcilhinney

    答えて

    2

    を使用しているため、結果は、最初のコードと同じです。 Addを使用し、使用するデータタイプについて疑問がある場合は、自分でデータ型を指定することをお勧めします。あなたがそれを行い、VarCharを指定するならば、同じ結果が得られるはずです。

    EDIT:こと、または最初のコードで 'N' プレフィックスを置く、すなわち

    "set password = convert(varchar(12),HASHBYTES('MD5',N'" 
    
    +0

    それは動作します、私は 'sqldbtype'が有効であることを知らない。したがって、 'Add'を使って' varchar'を指定してください。ありがとう – chopperfield

    関連する問題