台灣最大程式設計社群網站
線上人數
2077
 
會員總數:246056
討論主題:189637
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 防SQL語法攻擊的輸入
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
防SQL語法攻擊的輸入
價值 : 0 QP  點閱數:1076 回應數:0
樓主

站務人員 站長
門外漢
0 1580
542 9
發送站內信

捐贈 VP 給 站務人員
<%
'宣告變數
DIM LoginID,Password,RePassword,Name,Sex,ID,Address,
HomeTel,OfficeTel,Extension,MPhone,Fax,BYear,BMonth,
BDay,Email,News,objConn,objRecord
%>

<%
'取得變數
LoginID = trim(Request.Form("帳號")) '拿掉前後空白
Password = trim(Request.Form("密碼")) '拿掉前後空白
RePassword = trim(Request.Form("確認密碼")) '拿掉前後空白
Name = trim(Request.Form("姓名"))
Sex = Request.Form("性別")
ID = trim(UCase(Request.Form("身份證號"))) '拿掉前面空白,並且將ID的小寫字母變成大寫字母
Address = trim(Request.Form("地址"))
HomeTel = trim(Request.Form("住家電話"))
OfficeTel = trim(Request.Form("公司電話"))
Extension = trim(Request.Form("分機"))
MPhone = trim(Request.Form("行動電話"))
Fax = trim(Request.Form("傳真"))
BYear = Request.Form("年")
BMonth = Request.Form("月")
BDay = Request.Form("日")
Email = Request.Form("電子信箱")
News = Request.Form("電子報")
%>

<%
'檢驗兩次密碼輸入是否相同
If Password <> RePassword Then
Response.Redirect "../Msg.asp?Msg=6" '密碼兩次輸入不相同,帶參數6
End If
%>

<%
'限制帳號及密碼不可超過十碼
If Len(LoginID) > 10 or Len(Password) > 10 Then
Response.Redirect "../Msg.asp?Msg=3" '帳號或密碼超過十碼,帶參數3
End If
%>

<%
'限制帳號及密碼不可輸入特殊字元
If ASC(LoginID) < 48 or ASC(LoginID) > 57 and ASC(LoginID) < 65 or ASC(LoginID) > 90 and ASC(LoginID) < 97 or ASC(LoginID) > 122 Then
Response.Redirect "../Msg.asp?Msg=4" '帳號不可使用特殊字元,帶參數4
End If

If ASC(Password) < 48 or ASC(Password) > 57 and ASC(Password) < 65 or ASC(Password) > 90 and ASC(Password) < 97 or ASC(Password) > 122 Then
Response.Redirect "../Msg.asp?Msg=5" '密碼不可使用特殊字元,帶參數5
End If
%>

<%
'先判斷身份證號後九碼是否為數字
For i = 2 to Len(ID)
IF ASC(MID(ID,i,1)) < 47 or ASC(MID(ID,i,1)) > 58 Then
Response.Redirect "../Msg.asp?Msg=7" '身份證號後九碼非數字,帶參數7
End If
Next
%>

<%
'限制住家電話、公司電話、分機、行動電話、傳真僅可輸入數字
If ASC(HomeTel) < 48 or ASC(HomeTel) > 57 and ASC(OfficeTel) < 48 or ASC(OfficeTel) > 57 and ASC(Extension) < 48 or ASC(Extension) > 57 and ASC(MPhone) < 48 or ASC(MPhone) > 57 and ASC(Fax) < 48 or ASC(FAx) > 57 Then
Response.Redirect "../Msg.asp?Msg=15" '住家電話、公司電話、分機、行動電話、傳真輸入非數字,帶參數15
End If
%>

<%
'身份證號在有輸入時才作檢驗,若沒有輸入就直接跳離開這個迴圈
If ID <> empty Then
If Len(ID) = 10 Then
If ID = "A123456789" Then
Response.Redirect "../Msg.asp?Msg=8" 'A123456789不合法,帶參數8
ElseIf ASC(Left(ID,1)) < 64 or ASC(Left(ID,1)) > 91 Then
Response.Redirect "../Msg.asp?Msg=9" '第一碼非英文字母,帶參數9
ElseIf MID(ID,2,1) <> "1" and MID(ID,2,1) <> "2" Then
Response.Redirect "../Msg.asp?Msg=10" '第二碼非數字1或2,帶參數10
Else
ID_ABC_Data ="A10B11C12D13E14F15G16H17I34J18K19L20M21N22O35P23Q24R25S26T27U28V29W32X30Y31Z33"
CheckID = MID(ID_ABC_Data,InStr(ID_ABC_Data,Left(ID,1)) + 1,2) & MID(ID,2)
GetNo = 2
SUM = Left(CheckID,1)
For i = 9 to 1 step - 1
SUM = SUM + MID(CheckID,GetNo,1) * i
GetNo = GetNo + 1
Next
If ASC(Right(CheckID,1)) <> ASC(Right(10 - Right(SUM,1),1)) Then
Response.Redirect "../Msg.asp?Msg=11" '身份證號不合法,帶參數11
End If
End If
Else
Response.Redirect "../Msg.asp?Msg=12" '身份證號不是十碼,帶參數12
End If
Else
ID = empty
End If
%>

<%
Application.lock

'資料庫連結
set objConn = Server.CreateObject("ADODB.Connection") '建立ODBC
Provider = "Provider = Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;" '撰擇對應的驅動程式及輸入密碼
DBPath = "Data Source=" & Server.MapPath("../WebDB/Member.mdb") '指定資料庫路徑
objConn.Open Provider & DBPath '開啟資料庫
Set objRecord = Server.CreateObject("ADODB.Recordset")
objRecord.Open "Member", objConn, 3, 3

objRecord.AddNew
objRecord("LoginID") = LoginID
objRecord("Password") = Password
objRecord("Name") = Name
objRecord("Sex") = Sex
objRecord("ID") = ID
objRecord("Address") = Address
objRecord("HomeTel") = HomeTel
objRecord("OfficeTel") = OfficeTel
objRecord("Extension") = Extension
objRecord("MPhone") = MPhone
objRecord("Fax") = Fax
objRecord("BYear") = BYear
objRecord("BMonth") = BMonth
objRecord("BDay") = BDay
objRecord("Email") = Email
objRecord("News") = News
objRecord("RegistTime") = Now
objRecord.UpDate

Response.Redirect "../../Msg.asp?Msg=14" '加入會員成功,帶參數14

Application.Unlock
%>

--------------------------------------------------------------------------------
1 回應者: 版工--阿進 日期: 2002/5/17 下午 06:56:14
小建議
判斷是否為數字型態的資料
可以用IsNumeric()
來做判斷

本篇文章發表於2002-06-11 00:00
目前尚無任何回覆
   

回覆
如要回應,請先登入.