ASP獲取參數主要有下面兩種:
Request.QueryString (GET) 或 Request.Form (POST)
我們有時為了簡化代碼,會寫成 ID=Request("ID"),正是因為這樣寫法出現了問題……
原來WEB服務是這樣讀取數據的:
先取GET中的數據,沒有再取POST中的數據,還會去取Cookies中的數據!這個我也才發現。
通常的防注入系統,他會檢測GET和POST中的數據,如果有特殊字符就禁止數據的提交,而上面簡略寫法,就不會被check
到。
舉例說明,參數提交及獲取原理:
/1.asp?id=123
如果只輸:/1.asp 就不能看到正常的數據,因為沒有參數!
想知道有沒有Cookies問題(也就是有沒有Request("XXX")格式問題)
先用IE輸入:/1.asp加載網頁,顯示不正常(沒有輸參數的原因),之後在IE輸入框再輸入
javascript:alert(document.cookie="id="+escape("123"));
說明:
document.cookie="id="+escape("123") 就是把 123 保存到Cookies 的 ID 中。
alert(xxx) 就是彈對話框。
按回車後,會看到彈出一個對話框 內容是: id=123,之後,刷新網頁,如果正常顯示,表示是用Request("ID") 這樣的
格式收集數據,就可以試Cookies注入了。
在地址欄中輸入: javascript:alert(document.cookie="id="+escape("123 and 3=3"));
刷新頁面,如果顯示正常,可以再試下一步(如果不正常,就有可能也有過濾了)
javascript:alert(document.cookie="id="+escape("123 and 3=4"));刷新一下頁面如果不正常顯示,這就表示可以注入
了。
如果代碼是用Request.QueryString或Request.Form收集數據的話,是沒有Cookies注入問題的,因為服務程序是直截從
GET或POST中讀取數據的,Cookies是否有數據代碼不會去獲取的。