熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP防注入之解決方案--加強版

2013-11-13 09:53:44  來源: .NET編程 

  ASP防注入之解決方案
  特殊頁面處理
  因為有些頁通過流式傳遞(比如含有文件上傳的表單)
  如果單一使用窮舉Form對象的操作就會出錯
  所以要把這些頁面過濾出來同時在頁面中使用sql(檢測的字串)才行
  垃圾豬
  
  
  將本頁用include方法放在頭部以讓所有頁都可以調用比如include在connasp裡
  如果有流式上傳的頁面請把該頁加到表page中以防form沖突
  
  Dim N_noN_noarrayreq_Qsreq_FN_iN_dbstrConnN_rsN_userIPN_thispage
  N_userip = RequestServerVariables(REMOTE_ADDR)
  N_thispage = LCase(RequestServerVariables(URL))
  
  N_no = |;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare 可以自己修改懷疑是注入操作的字串
  N_noarray = split(LCase(N_no)|)
  
  Call DBopen()
  Call N_check_Qs()
  Call N_checkPage()
  Call DBCLose()
  
  檢測當前頁是否是特殊頁是就調用 N_check_form()
  sub N_checkPage()
  
  set N_rs = serverCreateObject(ADODBRecordSet)
  N_rsopen select * from page where spcpage like %
  if (N_rseof AND N_rsBof) then
  Call N_check_form()
  end if
  N_rsClose()
  set N_rs = nothing
  
  end sub
  
  檢測給定字串
  sub N_sql(agsql)
  這裡是不記錄數據庫如果要改請自己修改
  N_check CUSreq_QsOTHER
  end sub
  
  檢測RequestForm
  sub N_check_form()
  If RequestForm Then
  For Each req_F In RequestForm
  N_check req_FRequestForm(req_F)POST
  Next
  end if
  end sub
  
  檢測RequestQueryString
  sub N_check_Qs()
  If RequestQueryString Then
  For Each req_Qs In RequestQueryString
  N_check req_QsRequestQueryString(req_Qs)GET
  Next
  end if
  end sub
  
  檢測
  sub N_check(agagsqlsqltype)
  For N_i= To Ubound(N_noarray)
  If Instr(LCase(agsql)N_noarray(N_i)) Then
  call N_regsql(agagsqlsqltype)
  ResponseWrite MO
  end if
  Next
  end sub
  
  記錄並停止輸出
  ag 名稱
  agsql 內容
  sqltype 類型
  sub N_regsql(agagsqlsqltype)
  if(sqltypeOTHER) then
  ConnExecute(insert into SqlIn(Sqlin_IPSqlIn_WebSqlIn_FSSqlIn_CSSqlIn_SJ) values(
  end if
  ResponseWrite
  ResponseWrite 非法操作!系統做了如下記錄↓
  ResponseWrite 操作IP
  ResponseWrite 操作時間
  ResponseWrite 操作頁面
  ResponseWrite 提交方式
  ResponseWrite 提交參數
  ResponseWrite 提交數據
  
  Responseend
  end sub
  
  Sub DBopen()
  N_dbstr=DBQ=+servermappath(Sqlmdb)+;DefaultDir=;DRIVER={Microsoft Access Driver (*mdb)};
  Set Conn=ServerCreateObject(ADODBCONNECTION)
  Connopen N_dbstr
  end SUB
  
  Sub DBCLose()
  Connclose
  Set Conn = Nothing
  End sub
  
  

From:http://tw.wingwit.com/Article/program/net/201311/11888.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.