程序開發(fā)中的幾個請不要相信
更新時間:2009年04月15日 22:03:35 作者:
雖不算什么高深的東西,但至少也算一點點小經(jīng)驗,分享分享吧,如果您是高手,而且您還有點時間,那么請你耐心看完整篇文章,然后再幫忙指點指點,留下您的經(jīng)驗,我也好學(xué)習(xí)學(xué)習(xí)。
鏈接中的例子是一些腳本攻擊相關(guān)的內(nèi)容,有時間的朋友可以點開看看。
1.不要相信Request.QueryString:
相信在asp時代,這個問題比較嚴重,不信,隨便到網(wǎng)絡(luò)上找?guī)讉€asp的企業(yè)站,找到這種url"view.asp?id=xxx",改成"view.asp?id=xxx or 1=1",相信你會看到不一樣的東西,到了.net,應(yīng)該很少了,不過上次看到有人說CSDN爆過哦,簡單的解決方法是在取得數(shù)據(jù)時做數(shù)據(jù)類型驗證或轉(zhuǎn)換。比如:
int ViewID = 0;
if(int.TryParse(Request.QueryString["ID"], out ViewID)){
//...
}
2.不要相信maxlength:
有時候我們想客戶端輸入的某個值不超過一定的長度,這個時候可能就會用到input的maxlength,但maxlength能100%保證這個值的長度不超過maxlength嗎?
顯然,maxlength是不可信的,簡單的解決辦法是后臺代碼驗證數(shù)據(jù)長度:
string UserName = Request.QueryString["UserName"];
if(!string.IsNullOrEmpty(UserName)&&UserName.length > x){
//...提示錯誤或截斷數(shù)據(jù)
}
3.不要相信Hidden:
有時候我們想把些信息保存到前臺頁面,然后再發(fā)送回來,但是我們又不想讓客戶看到這個信息,于是,我們把數(shù)據(jù)放到了hidden里面,那客戶提交數(shù)據(jù)時,hidden里的內(nèi)容真的是我們放的內(nèi)容嗎?
改變Hidden的值 用戶名: 請先點擊"查看Hidden"查看原來的值.正常情況,客戶端提交給你的Type的值應(yīng)該是"Robot!",但是你把下面的代碼復(fù)制到地址欄然后Enter一下,再點查看Hidden看看; javascript:alert(window.c=function(){document.getElementById("Type").value = "我不是Robot!"}())</textarea>
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
這個我一時也沒想到好的驗證方法,暫時也沒有特殊的需求說必須驗證。
4.不要相信客戶端驗證:
比如2和3中的問題,可能有的朋友覺得,我客戶端再加個驗證不就OK了嗎?可是,往往,客戶端驗證也是不安全的,首先,如果客戶端禁用腳本,那客戶端驗證是完全失效的,另外,在腳本有效的情況下,腳本驗證也是可以被篡改的。
覆蓋Submit驗證 正常情況,點提交按鈕會驗證用戶名不能為空,并彈出提示,但是你把下面的代碼復(fù)制到地址欄然后Enter一下,再點提交看看; javascript:alert(window.c=function(){document.getElementsByTagName("form")[0].onsubmit=function(){alert("我是不會驗證數(shù)據(jù)的哦!");return true;}}())</textarea>
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
以前QQ空間里可以通過這個方法免費使用黃鉆模板,不知道現(xiàn)在還有沒有。這個就沒有什么好的解決辦法,只能后臺再驗證一次。
5.不要相信編輯器:
有的時候,可能項目中要用到一些簡單的編輯器,于是,我們就找到了一些編輯器,把不需要的功能(比如:編輯源碼、插入圖片等)剔除掉,就成了個簡單的編輯器,那這樣的編輯器還會有什么問題嗎?
無標題文檔 真正的編輯器應(yīng)該會有些加粗、傾斜什么的功能,我就不弄了,以最原始的iframe為例。 這個簡單的編輯器沒有查看源碼的功能,那客戶是不是真的就改變不了里面的內(nèi)容了? 請將下面的代碼復(fù)制到地址欄然后Enter; javascript:alert(window.c=function(){document.getElementById("sampleEditor").contentWindow.document.body.innerHTML = '
';}())</textarea> 如果用戶在里面插入個script標簽再提交給你呢? 其實還有個更簡單的方法,直接去另一個頁面復(fù)制,然后回到編輯器里粘貼,什么都過來了。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
暫時也沒有什么好的解決辦法,以前找到過過濾script標簽的代碼,但似乎不太完美。
6.不要相信Cookie:
網(wǎng)站中不可避免的會使用到Cookie,但如果一不注意,小心你的Cookie成了別人的"Cookie",
http://img.jb51.net/online/demo0415/Cookie.asp
取Cookie和寫Cookie的js方法是在網(wǎng)上找到的,具體鏈接也找不到了。解決辦法,似乎是Cookie加密(當然,即使是加密了,也盡量不要把敏感數(shù)據(jù)放到Cookie中),不知道各位高手還有沒有其它好辦法。
7.不要相信Request.UrlReferrer:
如果有朋友用這個來驗證請求,那么請注意了,這個東西也是不可信的。見代碼;
System.Net.HttpWebRequest request = System.Net.WebRequest.Create("http://www.dbjr.com.cn/") as System.Net.HttpWebRequest;
request.Referer = "http://www.dbjr.com.cn/";
...
那么,這個時候你取得的Urlreferrer會是http://www.dbjr.com.cn/,但這個請求卻是偽造的。
8.不要相信用戶:
用戶就是你潛在的威脅,客戶端的東西,永遠都不要輕信。
另,select標簽的內(nèi)容也是不可信的,大家可以動手試試,隨便建個頁面,里面放個select,然后:
javascript:alert(window.c=function(){var s=document.getElementsByTagName("select")[0];for(var x = 0; x < 100; x++){s.options[x]=new Option("選項" + x, x)}}());
歡迎高手不吝賜教。示例代碼下載。
1.不要相信Request.QueryString:
相信在asp時代,這個問題比較嚴重,不信,隨便到網(wǎng)絡(luò)上找?guī)讉€asp的企業(yè)站,找到這種url"view.asp?id=xxx",改成"view.asp?id=xxx or 1=1",相信你會看到不一樣的東西,到了.net,應(yīng)該很少了,不過上次看到有人說CSDN爆過哦,簡單的解決方法是在取得數(shù)據(jù)時做數(shù)據(jù)類型驗證或轉(zhuǎn)換。比如:
int ViewID = 0;
if(int.TryParse(Request.QueryString["ID"], out ViewID)){
//...
}
2.不要相信maxlength:
有時候我們想客戶端輸入的某個值不超過一定的長度,這個時候可能就會用到input的maxlength,但maxlength能100%保證這個值的長度不超過maxlength嗎?
顯然,maxlength是不可信的,簡單的解決辦法是后臺代碼驗證數(shù)據(jù)長度:
string UserName = Request.QueryString["UserName"];
if(!string.IsNullOrEmpty(UserName)&&UserName.length > x){
//...提示錯誤或截斷數(shù)據(jù)
}
3.不要相信Hidden:
有時候我們想把些信息保存到前臺頁面,然后再發(fā)送回來,但是我們又不想讓客戶看到這個信息,于是,我們把數(shù)據(jù)放到了hidden里面,那客戶提交數(shù)據(jù)時,hidden里的內(nèi)容真的是我們放的內(nèi)容嗎?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
這個我一時也沒想到好的驗證方法,暫時也沒有特殊的需求說必須驗證。
4.不要相信客戶端驗證:
比如2和3中的問題,可能有的朋友覺得,我客戶端再加個驗證不就OK了嗎?可是,往往,客戶端驗證也是不安全的,首先,如果客戶端禁用腳本,那客戶端驗證是完全失效的,另外,在腳本有效的情況下,腳本驗證也是可以被篡改的。
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
以前QQ空間里可以通過這個方法免費使用黃鉆模板,不知道現(xiàn)在還有沒有。這個就沒有什么好的解決辦法,只能后臺再驗證一次。
5.不要相信編輯器:
有的時候,可能項目中要用到一些簡單的編輯器,于是,我們就找到了一些編輯器,把不需要的功能(比如:編輯源碼、插入圖片等)剔除掉,就成了個簡單的編輯器,那這樣的編輯器還會有什么問題嗎?

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
暫時也沒有什么好的解決辦法,以前找到過過濾script標簽的代碼,但似乎不太完美。
6.不要相信Cookie:
網(wǎng)站中不可避免的會使用到Cookie,但如果一不注意,小心你的Cookie成了別人的"Cookie",
http://img.jb51.net/online/demo0415/Cookie.asp
取Cookie和寫Cookie的js方法是在網(wǎng)上找到的,具體鏈接也找不到了。解決辦法,似乎是Cookie加密(當然,即使是加密了,也盡量不要把敏感數(shù)據(jù)放到Cookie中),不知道各位高手還有沒有其它好辦法。
7.不要相信Request.UrlReferrer:
如果有朋友用這個來驗證請求,那么請注意了,這個東西也是不可信的。見代碼;
System.Net.HttpWebRequest request = System.Net.WebRequest.Create("http://www.dbjr.com.cn/") as System.Net.HttpWebRequest;
request.Referer = "http://www.dbjr.com.cn/";
...
那么,這個時候你取得的Urlreferrer會是http://www.dbjr.com.cn/,但這個請求卻是偽造的。
8.不要相信用戶:
用戶就是你潛在的威脅,客戶端的東西,永遠都不要輕信。
另,select標簽的內(nèi)容也是不可信的,大家可以動手試試,隨便建個頁面,里面放個select,然后:
復(fù)制代碼 代碼如下:
javascript:alert(window.c=function(){var s=document.getElementsByTagName("select")[0];for(var x = 0; x < 100; x++){s.options[x]=new Option("選項" + x, x)}}());
歡迎高手不吝賜教。示例代碼下載。
相關(guān)文章
詳解Visual Studio使用Git忽略不想上傳到遠程倉庫的文件
這篇文章主要介紹了Visual Studio使用Git忽略不想上傳到遠程倉庫的文件,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Jenkins集成Gitlab實現(xiàn)自動化部署的全過程記錄
因為中型公司不可能配置運維開發(fā),而開發(fā)只管開發(fā)的,所以運維只能是通過使用開源工具的方式來搭建自動化部署系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于Jenkins集成Gitlab實現(xiàn)自動化部署的相關(guān)資料,需要的朋友可以參考下2022-04-04IDEA2019.3在Plugins中搜索不到translation的解決
這篇文章主要介紹了IDEA2019.3在Plugins中搜索不到translation的解決,文中通過圖文的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Git pull(拉取)及push(上傳)相關(guān)命令介紹
這篇文章主要介紹了Git pull(拉取),push(上傳)相關(guān)命令,git是一個非常好用的分布式版本管理工具,Git是去中心化,每一個分支都是一個中心,并且支持本地倉庫存儲,像如今很多大公司都用git做版本控制。有興趣的話來學(xué)習(xí)一下2020-07-07知識蒸餾聯(lián)邦學(xué)習(xí)的個性化技術(shù)綜述
這篇文章主要為大家介紹了知識蒸餾聯(lián)邦學(xué)習(xí)的個性化技術(shù)綜述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05