جربت استخدم Code analizer لكى أعرف الثغرات الموجود وظهرت لىالرسالة التالية بعد فحص الكود ؟
إقتباس :CA2100 Review SQL queries for security vulnerabilities The query string passed to 'SqlDataAdapter.New(String, SqlConnection)' in 'add_dep.btn_Add_Click(Object, EventArgs)' could contain the following variables 'Me.dep_nm_tx.Text'. If any of these variables could come from user input, consider using a stored procedure or a parameterized SQL query instead of building the query with string concatenations. Sayadla add_dep.vb 39
والكود الذى استخدمه هو التالى
كود :
' التأكد من إسم القسم غير مسجل
Dim cn As New SqlConnection(Con_STR)
Dim x As String
x = "select *from dep where dep_nm = '" & dep_nm_tx.Text & "'"
[color=#FF0000] Dim sda As New SqlDataAdapter(x, cn)[/color]
Dim ds As New DataSet
sda.Fill(ds)
Dim dt As DataTable = ds.Tables(0)
If dt.Rows.Count > 0 Then
MessageBox.Show("هذا القسم مسجل من قبل بقاعدة البيانات", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
dep_nm_tx.Focus()
Exit Sub
End If
والجزء الذى باللون الأحمر هو الذى يقوم الكود اناليزر بالإشارة إليه
هل من توضيح لذلك ؟ وما هى الحلول الممكنة لتفادى تلك الرسالة
10-10-12, 01:20 PM (آخر تعديل لهذه المشاركة : 23-06-15, 11:05 AM {2} بواسطة abulayth.)
هذه المسألة معروفة وهي تتعلق ب sql injection وحقيقة اتعجب حيث أغلب الأعضاء في المنتدي القديم وهنا يستخدمون نفس الطريقه وهي تمرير النصوص في جمل sql علي ما يبدوا أنها مدرسه واحده أو ربما القص واللصق
انت تريد أن تعرف المترتب علي هذا أقول لك وبفضل الله انه يمكن اختراق برنامجك بالكامل والعبث به عموما استخدم البارميتر او ال الاجراءت المخزنه
10-10-12, 02:48 PM (آخر تعديل لهذه المشاركة : 23-06-15, 11:06 AM {2} بواسطة abulayth.)
amgadtamer كتب :هذه المسألة معروفة وهي تتعلق ب sql injection وحقيقة اتعجب حيث أغلب الأعضاء في المنتدي القديم وهنا يستخدمون نفس الطريقه وهي تمرير النصوص في جمل sql علي ما يبدوا أنها مدرسه واحده أو ربما القص واللصق
انت تريد أن تعرف المترتب علي هذا أقول لك وبفضل الله انه يمكن اختراق برنامجك بالكامل والعبث به عموما استخدم البارميتر او ال الاجراءت المخزنه
' التأكد من إسم القسم غير مسجل
Dim cn As New SqlConnection(Con_STR)
Dim x As String
[COLOR="#FF0000"] x = "select *from dep where dep_nm = @dep_nm"
Dim cm1 As New SqlCommand
cm1.Parameters.AddWithValue("@dep_nm", dep_nm_tx)[/COLOR]
Dim sda As New SqlDataAdapter(x, cn)
Dim ds As New DataSet
sda.Fill(ds)
Dim dt As DataTable = ds.Tables(0)
If dt.Rows.Count > 0 Then
MessageBox.Show("هذا القسم مسجل من قبل بقاعدة البيانات", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
dep_nm_tx.Focus()
Exit Sub
End If
ولم يظهر الكود اناليزر أى مشكلة ولكن المشكلة هى عند محولة الحفظ فى قاعدة البيانات تظهر تلك الرسالة فى الجزء السابق من الكود
إقتباس :Must declare the scalar variable "@dep_nm".
سعود كتب :اخي امجد هل المقصود بالاجراءات المخزنة : الدوال؟Functions
المقصود بالاجراءات المخزنه هي stored procedures الموجودة في SQL server وأيضا oracle وأيضا MySQL مع إختلاف المسميات وميزة هذه الإجراءات المخزنة
أنها مخزنه في قاعدة البيانات ولا تحتاج إلى compile قبيل التنفيذ علي عكس ال query وبالتالى هي أسرع وأأمن
إن شاء الله سوف أحاول عمل مثال
Now, while writing a Stored Procedure, the first step will be to write the
كود :
Create Procedure
statement as the first statement:
CreateProcedure Procedure-name (
Input parameters ,
Output Parameters (If required)
)
As
Begin
Sql statement used in the stored procedure
End
Now, suppose we need to create a Stored Procedure which will return a
كود :
student
name whose
كود :
studentid
is given as the input parameter to the stored procedure. Then, the Stored Procedure will be:
/* Getstudentname is the name of the stored procedure*/
CreatePROCEDURE Getstudentname(
@studentidINT--Input parameter , Studentid of the student
)
AS
BEGIN
SELECT Firstname+' '+Lastname FROM tbl_Students WHERE studentid=@studentid
END
We can also collect the
كود :
student
name in the output parameter of the Stored Procedure. For example:
/* GetstudentnameInOutputVariable is the name of the stored procedure which
uses output variable @Studentname to collect the student name returns by the
stored procedure
*/
CreatePROCEDURE GetstudentnameInOutputVariable
(
@studentidINT, --Input parameter , Studentid of the student
@studentnameVARCHAR(200) OUT -- Out parameter declared with the help of OUT keyword
)
AS
BEGIN
SELECT @studentname= Firstname+' '+Lastname FROM tbl_Students WHERE studentid=@studentid
END
Note* */ is used to write comments in one or multiple lines -- is used to write a comment in a single line How to Alter a Stored Procedure in a SQL Server In SQL Server, a stored procedure can be modified with the help of the
كود :
Alter
keyword. Now if we want to get
كود :
student
email address through the same procedure
كود :
GetstudentnameInOutputVariable
. So we need to modify it by adding one more output parameter "
كود :
@StudentEmail
" which is shown below:
/* Stored Procedure GetstudentnameInOutputVariable is modified to collect the
email address of the student with the help of the Alert Keyword
*/
AlterPROCEDURE GetstudentnameInOutputVariable
(
@studentidINT, --Input parameter , Studentid of the student
@studentnameVARCHAR (200) OUT, -- Output parameter to collect the student name
@StudentEmailVARCHAR (200)OUT -- Output Parameter to collect the student email
)
AS
BEGIN
SELECT @studentname= Firstname+' '+Lastname,
@StudentEmail=email FROM tbl_Students WHERE studentid=@studentid
END
Note: It is not necessary that a stored procedure will have to return. There can be a case when a stored procedure doesn't returns anything. For example, a stored procedure can be used to
كود :
Insert
,
كود :
delete
or
كود :
update
a SQL statement. For example, the below stored procedure is used to
كود :
insert
value into the table
كود :
tbl_students
.
/* This Stored procedure is used to Insert value into the table tbl_students.
Execution of the Stored Procedure in SQL Server Execution of the Stored Procedure which doesn't have an Output Parameter A stored procedure is used in the SQL Server with the help of the "
كود :
Execute
" or "
كود :
Exec
" Keyword. For example, if we want to execute the stored procedure "
كود :
Getstudentname
", then we will use the following statement.
Execute Getstudentname 1 Exec Getstudentname 1
Execution of the Stored Procedure using the Output Parameter If we want to execute the Stored procedure "
كود :
GetstudentnameInOutputVariable
" , then we first need to declare the variable to collect the output values. For example:
Declare@Studentnameasnvarchar(200) -- Declaring the variable to collect the Studentname
Declare@Studentemailasnvarchar(50) -- Declaring the variable to collect the Studentemail