วันก่อนได้ไปสัมนาซึ่งทาง msdn ของ microsoft ได้จัดขึ้นในหัวการสัมนาที่ชื่อว่า developing secure application with studio .net 2005 ครับ โดยรวมแล้วก็อธิบายความสามารถของ product ตัวนี้เป็นส่วนใหญ่ จำได้ว่าได้เข้าไปลองเล่น web 2.0 ตั้งแต่beta แรกๆเลยตอนนั้นสุดยอดของความอืดเล่นครับเล่นเอาMemmory low เตือนทุกครั้งที่ใช้โปรแกรม เครื่องมีแรมแค่ 256ครับ ถามว่าMicrosoftพัฒนาเครื่องมือตัวนี้มาตามความคิดของผมแล้วมีทั้งข้อดีและข้อเสียในด้านพัฒนาโปรแกรม
ข้อดีก็คือสามารถพัฒนาโปรแกรมได้เร็ว เพราะเครื่องมือส่วนใหญ่แล้วล้วนลากวางจนแทบไม่ต้องเขียนcode เลย คนที่ไม่รู้ code ถ้ามีความเข้าใจก็สามารถทำได้ แต่ถ้าคนที่มีความรู้เรื่องObjectหรือ coding เป็นอย่างดีก็สบายเลยครับประยุกค์ใช้งานได้ดังใจเลยทีเดียว
ข้อเสีย อันนี้ในความคิดของผมเองในทางกลับกันเครื่องมือที่เยอะขนาดนี้กลับทำให้ programmer กลับกลายเป็นผู้พัฒนาอย่างเต็มตัวคือแทนที่จะเขียนprogramสร้างเครื่องมือมาใช้เอง อย่าง programmer สมัยก่อนแค่มีnotepade ตัวเดียวก็เขียน programได้ออกมาแบบไม่น่าเชื่อ ทำให้programmerสมัยใหม่ไม่รู้หรือข้ามขั้นตอนการเขียนโปรแกรมที่ควรค่าแก่การเรียนรู้อย่างหน้าเสียดาย เพราะมั่วแต่ลากวางจนไม่รู้ว่าไอ้ตัวที่ลากวางมันมาได้อย่างไร ก็แค่ความคิดครับยังไงทุกสิ่งทุกอย่างไม่เคยหยุดนิ่งอยู่แล้ว
มีอยู่ช่วงหนึ่งที่วิทยากรบรรยายเรื่องความปลอดภัย ในเรื่องของSql Injectionเรื่องนี้เป็นเรื่องเก่าแล้วก็ว่าได้ครับ แต่ต้องไม่เพิกเฉยเพราะจะทำให้ระบบได้รับความเสียหายได้จากกลุ่มคนที่ประสงค์ร้ายที่อาจเข้ามาได้ทุกเมื่อ แต่สำหรับคุนที่ไม่เรื่องSql injection คืออะไรเข้าไปอ่านได้ http://mvp.unixwiz.net/techtips/sql-injection.html
ใน.Net เองก็มีAdo.Net ที่สามารถแก้ปัญหาตรงนี้อย่างดีทีเดียวครับ มาดูตัวอย่างกันครับสังเกตุตรงcommment จะถูก Injection ได้ง่ายครับ
221 Dim constr As String = "Server=(local);Database=test;uid=test;pwd=test"
222 Dim conn As New SqlConnection(constr)
223 Try
224 conn.Open()
225 'Dim sqlstr As String = "select * from table where username='" + username.text + "' and password='" + password.text + "';"
226 Dim sqlstr As String = "select * from table where username=@username and password=@password;"
227 Dim cmd As New SqlCommand
228 cmd.CommandType = CommandType.Text
229 cmd.CommandText = sqlstr
230 cmd.Connection = conn
231 Dim pusername As New SqlParameter
232 pusername.SqlDbType = SqlDbType.VarChar
233 pusername.ParameterName = "@username"
234 pusername.Value = username.text
235 cmd.Parameters.Add(pusername)
236 Dim ppassword As New SqlParameter
237 ppassword.SqlDbType = SqlDbType.VarChar
238 ppassword.ParameterName = "@password"
239 ppassword.Value = password.text
240 cmd.Parameters.Add(ppassword)
241 Dim reader As SqlDataReader = cmd.ExecuteReader
242 'Next...read
243 Catch
244 Throw New Exception("Error:")
245 End Try