日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL關于特殊字符處理的基本方法

admin
2011年2月16日 0:2 本文熱度 2917
一定要對用戶可能輸入的諸如引號,尖括號等特殊字符給予足夠重視,它們可能引發嚴重的安全問題。SQL注入的基本手法之一,就是利用對單引號未加過濾的安全漏洞。

用戶的輸入無非兩個用途:對數據庫操作或顯示在頁面上,下面分別對這兩種情況下特殊字符的處理加以說明。

1. 對數據庫操作
用戶輸入的數據用于對數據庫進行操作時,又分為兩種情況,一是進行寫庫操作,二是作為查詢條件。

1.1 寫庫操作
(insert及update都視為寫庫操作,這果以insert為例說明,update的處理相同)
一般采用insert語句或AddNew方法兩種方式進行寫庫操作,我們先來看insert語句:

DIM username,sqlstr
username = trim(Request.Form("uname"))
sqlstr = "insert into [userinfo] (username) values ('"& username &"')"

以SQL Server為例,使用這種方式寫庫,如果username中含用單引號('),會出錯。使用下面的自定義函數,可以將單引號進行轉換:

Rem 轉換SQL非法字符
function SQLEncode(fString)
if isnull(fString) then
SQLEncode = ""
exit function
end if
SQLEncode=replace(fString,"'","''")
end function

以上函數將一個單引號轉換為兩個連續的單引號,數據庫能夠接受,并以一個單引號寫入。SQL語句改為:

sqlstr = "insert into [userinfo] (username) values ('"& SQLEncode(username) &"')"

再來看AddNew方法:

DIM username
username = trim(Request.Form("uname"))
'MyRst為Recordset對象,MyConn為Connection對象
MyRst.open "[userinfo]",MyConn,0,3
MyRst.AddNew
MyRst("username").Value = username
MyRst.Update
MyRst.Close

使用這種方式寫庫時,不必調用SQLEncode()對單引號進行轉換,數據庫會自行處理。

對于存儲過程的的參數,同樣不必進行單引號的轉換。

建議大家利用存儲過程進行操作,好處嘛,我在《ASP與存儲過程》一文中已做了闡述。否則,建議使用AddNew方法寫庫,好處不僅僅在于避免對單引號進行處理,本文對此不作深入探討。

1.2 用戶輸入做為查詢條件
如果用戶輸入的數據作為查詢條件出現在where子句中,不論該where子句屬于update語句、delete語句還是select語句,都要對單引號進行轉換。

2. 用戶輸入的數據作為輸出,顯示在頁面上
我們這里只討論不允許用戶使用HTML代碼的情況,也就是說,即使用戶輸入了HTML代碼,這些數據也不會以HTML代碼的形式顯示。至于允許用戶使用HTML代碼的情況,比較復雜,以后專文探討。

用戶輸入的數據是絕對不可以不加處理,原樣顯示的。如果其中包含HTML或js代碼,使你的頁面混亂不堪倒是小事,甚至可以格掉你的硬盤。

輸出顯示在頁面上的數據,有可能是用戶的直接輸入,或是取自數據庫??梢钥吹揭陨显谌霂鞎r的處理只是轉換了單引號,對尖括號,雙引號等特殊字符并未處理,我們放在輸出的時候再進行處理。

ASP中的server.HTMLEncode()方法可以將許多字符轉換為“HTML字符”,如將<轉換為<,將>轉換為>等等。

在數據顯示在頁面上之前,可以用server.HTMLEncode()對其進行轉換。但是該方法不會對回車,空格進行轉換,這樣就造成以下問題:如果用戶是通過textarea控件輸入的數據,輸出時將不會保留原有格式,不僅沒有回車換行,多個空格也只會顯示為一個。為了解決這個問題,我們使用以下自定義函數:

Rem 轉換HTML非法字符,用于輸出顯示時
function HTMLEncode(fString)
if not isnull(fString) then
fString = Replace(fString, ">", ">")
fString = Replace(fString, "<", "<")
fString = Replace(fString, CHR(34), """) '雙引號
fString = Replace(fString, CHR(39), "'") '單引號
fString = Replace(fString, CHR(32)&CHR(32), "  ") '空格
fString = Replace(fString, CHR(9), " ") 'tab鍵值
fString = Replace(fString, CHR(10), "<br>") '換行
fString = Replace(fString, CHR(13), "") '回車
HTMLEncode = fString
end if
end function

調用以上函數,輸出通過textarea控件輸入的數據,會得到滿意的結果。

如果數據輸出在表單控件中,不論是何種控件,都可利用server.HTMLEncode()方法轉換字符,即使是對于textarea控件,也不會產生問題。雖然回車空格沒有被轉換,但在該控件中可以被識別。但是,server.HTMLEncode()方法不轉換單引號。所以,控件的值一定要使用雙引號:

<input type=text name=uname value=""" & server.HTMLEncode(username) & """>

否則,如果用戶輸入的是 '' onclick=javascript:.... ,以上代碼將顯示為:

<input type=text name=uname value='' onclick=javascript:...>

而javascript命令可以做的事情實在是太多了。

以上,通過用戶輸入數據的兩種用途,對特殊字符的處理做了大概的說明。還有一種情況:用戶的輸入作為GET請求的參數值。比如通過以下URL向服務器發送請求:test.asp?username=MyName

我一般只把數值型的數據做此類提交,并在接收時對數據類型做驗證。若是字符型的數據,如何處理特殊字符呢?有興趣的朋友思考一下吧,呵呵。

有些朋友喜歡用JAVAScript過濾特殊字符,而且限制輸入的字符很多。我不建議這么做,一是JAVAScript是客戶端運行的,不可靠。要知道,對服務器的請求是可以偽造的,偽造者可不會加上你的JAVAScript代碼;二是JAVAScript不太友好;三者,實際上沒有必要限制那么多字符,限制太多,用戶會害怕的。

總結一下我對特殊字符處理的經驗吧:

1. 對接收到的數據類型進行驗證;
2. 盡量通過存儲過程對數據庫進行操作;
3. 如上一點不可行,盡量使用AddNew方法寫庫;
4. 對作為查詢條件的數據,使用自定義函數SQLEncode()轉換單引號;
5. 表單控件的值,一定要用雙引號引起來;
6. 在表單控件中顯示數據時,使用server.HTMLEncode()方法轉換字符;
7. 對于通過textarea提交的數據,使用自定義函數HTMLEncode()轉換字符并保持格式;
8. 盡量避免使用Request()接收數據,應使用Request.Form()或Request.QueryString();
9. 盡量避免通過URL傳遞字符參數(只用此方式傳遞數值參數)

該文章在 2011/2/16 0:02:35 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: a级精品九九九大片免费看 婷婷亚洲久悠 | 亚洲熟女精品一区二区成人 | 99精品视频在线视频免费观看 | 手机影院 | 囯产精品一品二区三区 | 国产午夜福利在线观看视频 | 国产极品一区 | 两个人的视频www中文 | 日韩va不卡精品一区二区 | 亚洲影院| 无人区一码二码三码四码区 | 亚洲精品国产va在线观看天堂 | 中文精品免费视频 | 免费人成黄页在线观看69 | 免费激情网站国产高清第一页 | 亚洲人成日韩中文字幕不卡 | 成人亚洲欧美丁香在线观看 | 又硬又粗又大一区二区三区视频 | 国产人成午夜免电影费观看 | 欧美日韩一本到手机视频观看一区 | 97影院午夜午夜伦不卡 | 天堂视频 | x8x8国产在线最新地址 | 国产h视频在线观看网 | 国精一二二产品无人区 | 在线观看亚洲一区二区三区 | 亚洲精品视频在 | 美女视频性感网站 | 国产欧美精品国产国产专区 | 欧美日本一区二区视频在线播放 | 欧美国产日韩在线播放成人 | 欧美性大战xxxx | 在线观看亚洲精品一区二区 | 无毒不卡在线观看无需下载 | 香蕉影院中文字幕视频在线观看 | 欧美三级欧美一级在线视频 | 精品免费在线 | 国产精品一区二区三区免 | 国产精品蜜桃丝袜 | 亚洲欧美中文高清在线专区 | 精品国产电影自在免费观看 |