轉lake2
說到url編碼,你或許會想起n年前的url編碼漏洞。可惜我是「生不逢時」啊,我接觸網路時,那個漏洞早就絕跡咯。
言歸正傳,url 編碼是什麼東東呢?看看我從網上抄的定義:
引用:
url編碼是一種瀏覽器用來打包表單輸入的格式。瀏覽器從表單中獲取所有的name和其中的值 ,將它們以name/value引數編碼(移去那些不能傳送的字元, 將資料排行等等)作為url的一部分或者分離地發給伺服器。不管哪種情況, 在伺服器端的表單輸入格式樣子象這樣:
thename=ichabod+crane&gender=male&status=missing& ;headless=yes
url編碼遵循下列規則: 每對name/value由&符分開;每對來自表單的name/value由=符分開。如果使用者沒有輸入值給這個name,那麼這個name還是出現,只是無值。任何特殊的字元(就是那些不是簡單的七位ascii,如漢字)將以百分符%用十六進製制編碼,當然也包括象 =, &, 和 % 這些特殊的字元。
呵呵,明白了吧,其實url編碼就是乙個字元ascii碼的十六進製制。不過稍微有些變動,需要在前面加上「%」。比如「/」,它的ascii碼是92,92的十六進製制是5c,所以「/」的url編碼就是%5c。那麼漢字的url編碼呢?很簡單,看例子:「胡」的ascii碼是-17670,十六進製制是bafa,url編碼是「%ba%fa」。呵呵,知道怎麼轉換的了吧。
等等,好像跑題了啊,呵呵,不好意思:)
現在sql注射非常流行,所以就有人寫了一些防注射的指令碼。當然啦,思路不一樣,效果大不同。各位看官請看下面的××sql通用防注入asp版部分**。
fy_url=request.servervariables("query_string")
fy_a=split(fy_url,"&")
redim fy_cs(ubound(fy_a))
on error resume next
for fy_x=0 to ubound(fy_a)
fy_cs(fy_x) = left(fy_a(fy_x),instr(fy_a(fy_x),"=")-1)
next
for fy_x=0 to ubound(fy_cs)
if fy_cs(fy_x)<>"" then
if instr(lcase(request(fy_cs(fy_x))),"and")<>0 then
response.write "出現錯誤!"
response.end
end if
end if
next
它的思路就是先獲得提交的資料,以「&」為分界獲得並處理name/value組,然後判斷value裡是否含有定義的關鍵字(這裡為求簡便,我只留下了「and」),有之,則為注射。
乍一看去,value被檢查了,似乎沒有問題。呵呵,是的,value不會有問題,可是,name呢?
它的name/value組值來自於request.servervariables("query_string"),呵呵,不好意思,這裡出問題了。request.servervariables("query_string")是得到客戶端提交的字串,這裡並不會自動轉換url編碼,哈哈,如果我們把name進行url編碼再提交的話,呵呵,那就可以繞過檢查了。比如引數是ph4nt0m=lake2 and lis0,此時程式能夠檢測到;如果提交%50h4nt0m=lake2 and lis0(對p進行url編碼),程式就會去判斷%50h4nt0m的值,而%50h4nt0m會被轉換為ph4nt0m,所以%50h4nt0m值為空,於是就繞過了檢測。
等等,為什麼既然name不解碼可以繞過檢查而value就不能繞過呢?因為value的值取自request(fy_cs(fy_x)),這個伺服器就會解碼的。
程式怎麼改進呢?只要能夠得到客戶端提交的資料是解碼後的就可以了,把得到name的語句改為for each submitname in request.querystring就可以了。
js匹配表單name的值獲取value
html sort01 value sort02 value sort03 value 需求 獲取頁面中所有的name格式都為 sort 這種形式表單的值,並且要name和對應的value值。方法一 alert input name sort map function get var a input...
Html中 value 和 name 屬性的作用
name是控制項的名稱 多個控制項可以取同乙個名稱 value是控制項的值,下面為大家介紹下按鈕 核取方塊 單選框 下拉列表 隱藏域中的value所代表的含義 1.按鈕中用的value 指的是按鈕上要顯示的文字 比如 確定 刪除 等 2.核取方塊用的value 指的是這個核取方塊的值 3.單選框用的...
關於檔案中的 name
一句話說明之 name 為檔案的使用方式標誌 1.若檔案直接被執行,則其值為 main 2.若被匯入,則其值為檔名 所以當在乙個檔案 filename.py 中進行單元測試是,才會這樣子寫 if name main print hello 不要理解成執行檔案時僅這一段會執行,比如,我在此句的上面寫乙...