2011-12-18 6 views
0

私のSQLはこのようにされた場合、私は1つのデータベースに問題があります。二重引用符を使用してクエリを操作するにはどうすればよいですか?

Dim Username 
Username = request.form(trim("username")) 
Username = Replace(username,"'","''") 

Dim email 
email = request.form(trim("email")) 
email = Replace(email,"'","''") 

Dim question 
question = request.form(trim("question")) 
question = Replace(question,"'","''") 

Dim answer 
answer = request.form(trim("answer")) 
answer = Replace(answer,"'","''") 


Dim date_answered 
dag = Day(Now()) 
maand = Month(Now()) 
jaar = Year(Now()) 
uur = Hour(Time) 
minuten = Minute(Time) 
seconden = Second(Time) 
datum= jaar & "-" & maand & "-" & dag 
tijd = uur & ":" & minuten& ":" & seconden 
date_answered = (datum & " " & tijd) 

Dim isActive 
isActive = "yes"  
sql="UPDATE faqtbl SET " 
     sql=sql & "Name='" & username & "'," 
     sql=sql & "email='" & email & "'," 
     sql=sql & "question='" & question & "'," 
     sql=sql & "answer='" & answer & "'," 
     sql=sql & "date_answered='" & date_answered & "'," 
     sql=sql & "isActive='" & isActive & "'" 
     sql=sql & " WHERE ID='" & lngRecordNo &"';" 
     on error resume next 

何の問題は、私はデータベースに追加するデータは、二重引用符を使用している場合まで、すべてではありません。 二重引用符を使用してクエリを操作する方法を教えてください。 ありがとうございました..

+0

あなたは、これはあなたがしたいか、その時点でエラーをしていない二重引用符でテーブル値を挿入することを意味しています、もしそうならあなたのコードのどの行ですか? –

+6

文字列を渡す代わりに、パラメータとストアドプロシージャを使用する方法を学んでください。あなたが使用しているこの方法は、SQLインジェクションに対して広く開かれています。ダブルクォートは唯一の問題ではありません:&、 '、||も問題を引き起こします。 – xQbert

+0

一重引用符を変更するのと同じ方法で二重引用符を変更することができます – Dee

答えて

5

データに引用符を使用していない場合でも、コードに問題があります。動的に生成されたSQL文は、SQL interjectionの攻撃に対して広く公開されています。クエリをuse query parametersに書き直す必要があります。これは、引用符の問題を解決し、SQLをより堅牢にします。

はここでパラメータを使用するようにupdateを変更する方法の簡単な例です:

Imports System.Data.SqlClient 
Public Class Example 
    Private Sub Update(ByVal userName As System.String, _ 
      ByVal email As System.String) 
     Dim con As SqlConnection = New SqlConnection(_ 
      "Data Source=.;Integrated Security=True;<...>") 
     con.Open() 
     Dim cmdText As String = _ 
      "UPDATE faqtbl SET [email protected],[email protected]" 
     Dim cmd As SqlCommand = New SqlCommand(cmdText, con) 
     With cmd.Parameters 
      .Add(New SqlParameter("@UserName", userName)) 
      .Add(New SqlParameter("@email", email)) 
     End With 
     cmd.ExecuteNonQuery() 
     con.Close() 
     con = Nothing 
    End Sub 
End Class 
+2

OPは輸入品を使わない古典的なASPを求めています – Dee

関連する問題