国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

有效防止SQL注入漏洞詳細說明

2024-05-04 21:58:51
字體:
來源:轉載
供稿:網友

1.如果動態構造的sql語句中包含參數,請必須對參數做如下操作:

a.將'(單引號)替換成''(兩個單引號)

b.將--(注釋符)替換掉

c.將參數加入語句時,一定要在前后各加上引號,如:'select * from table where id='''+@id+''''這樣的加法.

2.如果動態構造的sql語句中包含表參數,請勿必給表加上[](中括號),如:'select * from ['+@tab+']'這樣的做法.

3..避免動態sql語句:尤其是從ie客戶端獲取查詢、修改、刪除條件的字段最容易被注入,例如上述從客戶端獲取personid,為了開發方便,直接把從客戶端獲取的persongid作為sql語句的條件,卻沒有對personid作必要的檢查,所以在開發時執行sql語句時最好使用preparedstatement類.

4.驗證數據:在客戶端ie使用網頁特效驗證用戶輸入數據的合法性作用其實不是很大,一定要在獲取客戶端數據之后,對數據進行嚴格的驗證,開發人員不要假想用戶只會輸入合法的數據,確保在應用程序中檢查分號、引號、括號、sql關鍵字等,可以使用正則表達式來進行復雜的模式匹配,運用它可以達到良好的效果.

×××網站地址薄查看程序需要傳遞一個personid,personid可以通過url參數傳遞,由于地址本查看程序直接獲取personid,沒有做任何數據合法性驗證,而且personid是字符串變量,獲取personid的代碼如下:

  1. if (getparameter(req,"personid")!=null){ 
  2. //開源代碼Vevb.com 
  3. personid=getparameter(req,"personid").trim(); 
  4.  
  5. }else
  6.  
  7. personid=""
  8.  

該程序中組合成的動態sql語句如下:

personsql="select * from 表名 where userid="+long.tostring(userid)+" and addrcontactid="+personid;

由于程序沒有檢查personid是否是整數,所以攻擊者隨便給personid賦一個值,即可繼續運行后續的程序邏輯,如果攻擊者輸入如下網址:

http://www.----------------------?personid=6414 or 2=2

組合成的sql語句如下:

select * from 表名where userid=1433620 and addrcontactid=6414 or 2=2

防范方法:sql注入漏洞可謂是“千里之堤,潰于蟻穴”,這種漏洞在網上極為普遍,通常是由于程序員對注入不了解,或者程序過濾不嚴格,或者某個參數忘記檢查導致,在這里,我給大家一個函數,代替asp教程中的request函數,可以對一切的sql注入say no,函數如下:

  1. function saferequest(paraname,paratype)  
  2.  '--- 傳入參數 ---  
  3.  'paraname:參數名稱-字符型  
  4.  'paratype:參數類型-數字型(1表示以上參數是數字,0表示以上參數為字符) 
  5.  
  6.  dim paravalue  
  7.  paravalue=request(paraname)  
  8.  if paratype=1 then  
  9.   if not isnumeric(paravalue) then  
  10.    response.write "參數" & paraname & "必須為數字型!"  
  11.    response.end  
  12.   end if  
  13.  else  
  14.   paravalue=replace(paravalue,"'","''")  
  15.  end if  
  16.  saferequest=paravalue  
  17. end function 

上面函數應用,對于int型的參數,如文章的id等,可以先判斷是不是整數,實例代碼如下:

  1. id =trim(request("id")) 
  2. if id<>"" then 
  3.   if not isnumeric(id) then 
  4.     response.write"請提供數字型參數" 
  5.     response.end 
  6.   end if 
  7.   id = clng(id) 
  8. else 
  9.   response.write"請輸入參數id" 
  10.   response.end 
  11. end if 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄱阳县| 武强县| 松阳县| 吉安市| 新和县| 千阳县| 贵溪市| 梁平县| 通州区| 社旗县| 吉隆县| 湖州市| 巧家县| 镇江市| 延吉市| 托克逊县| 平湖市| 丰原市| 酒泉市| 视频| 上饶市| 涞源县| 耿马| 稻城县| 宜春市| 水城县| 昭通市| 景泰县| 松原市| 漳州市| 贡嘎县| 五寨县| 鄂伦春自治旗| 那坡县| 汝城县| 靖江市| 许昌县| 鹿泉市| 古田县| 武义县| 法库县|