安全指令碼程式的編寫 V1.0

來源:互聯網
上載者:User
安全|程式|指令碼 基本思路:
為沒一個功能寫一個獨立的程式,程式頁
儘可能少的讓客戶瞭解你的伺服器端資訊
不要用"客戶應該這麼寫"這個思路想問題
儘可能多的想到不可能發生的事情

1.關於互動式動態網頁可能存在的問題
1.1 form類型的互動
1.1.1 概念介紹
在我們和瀏覽者進行互動時,最常用到的就是form(post/get/put方法),雖然非常方便,但是很多問題也是因他而起。
form表單中input標誌
用來接受使用者輸入的資訊,例如:使用者名稱、密碼、email等。如果你沒有對使用者輸入進行很好的檢查的話,一個惡意的使用者
會屏蔽掉一些安全機
制,繞過安全認證。例如,輸入標準的HTML語句或者javascript語句會改變輸出結果 ,在輸入框中打入標準的HTML語句會
得到什麼樣的結果呢?比如一個留言本,我們留言內容中打入:<font size=10>你好!</font>  如果你的程式中沒有屏
蔽html語句,那麼就會改變"你好"字型的
大小。在留言本中改變字型大小和貼圖有時並不是什麼壞事,反而可以使留言本生動。但是如果在輸入框中寫個
javascript 的死迴圈,比如:
<a herf="http://someurl" onMouseover="while(1) {window.close('/')}">第一萬個驚心動魄</a> 那麼其他查看該留言
的客人只要移
動滑鼠到"第一萬個驚心動魄",上就會使使用者的瀏覽器因死迴圈而死掉。
1.1.2 防範要點
(1)對特殊字元進行過濾
([\&;\`'\\\|"*?~<>^\(\)\[\]\{\}\$\n\r])/\\$1/g;),這個是最基本的,在很多地方也已經不只一次提到過
<script language="vbscript">
sub uBotton_onclick
if form1.uUserName.value=""then
msgbox"您的姓名不可為空!",0+32,"哦!還不行"
form1.uUserName.focus
exit sub
end if

if form1.uPassword.value=""then
msgbox"您的密碼不可為空!",0+32,"哦!還不行"
form1.uPassword.focus
exit sub
end if

if form1.uUserName.value=""then
msgbox"您的姓名不可為空!",0+32,"哦!還不行"
form1.uUserName.focus
exit sub
end if
form1.submit
end sub
</script>


function isEmpty(objname)
{
var str = document.inputform[objname].value
var tmpstr = str.replace([\&;\`'\\\|"*?~<>^\(\)\[\]\{\}\$\n\r])/\\$1/g;,"")
var tmpstr = tmpstr.replace([\&;\`'\\\|"*?~<>^\(\)\[\]\{\}\$\n\r])/\\$1/g;,"")
return (tmpstr.length==0)
}

function check()
{
tf=document.inputform
errors=""
if (isEmpty("username")) errors += "使用者名稱不可為空。\n";
if (isEmpty("password")) errors += "密碼不可為空!\n"
if (errors!="")
alert(errors);
return (errors=="")
}
(2) 對輸入的字元長度進行限制
(3) 進行儘可能多的錯誤出理和錯誤陷阱
(4) 儘可能多的使用以下這些標誌,減少使用者輸入的機會
<input type="checkbox" name="checkbox" value="checkbox">
<select name="select"> </select>
<input type="radio" name="radiobutton" value="radiobutton">

  
1.2 post/get類型的互動

1.2.1 概念介紹
這種類型的問題主要是瀏覽者可以通過瀏覽器的地址欄對指令碼頁通過添加參數來和伺服器進行互動,這些參數已經繞過放
在用戶端提交頁的輸入檢
查了,還有就是可以通過地址欄輸入較長的參數或惡意編造的代碼造成伺服器異常運算錯誤,導致伺服器宕機或緩衝區溢
出。

1.2.2 防範要點
(1) 盡量不要讓瀏覽者瞭解到你的運算提交頁
(2) 不允許地址欄提交參數
例如ASP程式中的request.serverVariables(QUERY_STRING)檢測是否有參數,如果有則使用response.redirect()強制返回
指定頁,可以
是首頁,或者你自己做的警告頁。
(3) 指令碼頁間傳遞參數不要再瀏覽器欄顯示,儘可能少的讓瀏覽者瞭解你的程式規則、參數等
例如ASP中的Request.form和Request.QueryString這兩個資料集合分別使用的是post和get方法,我們盡量不要是用
Request.QueryString這個資料集合,儘可能少的讓瀏覽者有和你互動的機會,

2. 安全認證的問題
2.1 需要安全認證密碼認證的可能存在的問題
2.1.1 概念介紹
現在流行的CGI應用程式傾向於收集信用卡資訊。資料收集是CGI 應用程式的一個簡單的任務,但是敏感資訊的
收集需要一個將資訊從瀏覽器傳送給伺服器和CGI程式的安全途徑。

舉個例子,假設我要通過Internet來銷售書。我可能在瀏覽器上建立一個表單,允許要購書的顧客通過表單提交它的個人
資訊和信用卡號碼。受
到這些資訊後,我會將它們儲存到我的電腦作為商業記錄。

如果有人侵入我的商業電腦,那麼他可能會訪問存放顧客資訊和信用卡號碼的機密資料。為了避免這種情況,我會審查
我的電腦配置安全了
,並確定用來接受表單的CGI指令碼不會被惡意的操縱。換句話說,我,作為電腦的系統管理員和CGI程式員,要儘力控制
住第一個問題:防止
資訊直接從我的電腦中被竊取。

然而,怎樣防止當資訊由用戶端發往伺服器過程中有人中途竊取呢?記住資訊怎樣由Web伺服器傳送到CGI程式了嗎?資訊
通過網路由瀏覽器先
傳送到伺服器,然後伺服器將資訊傳送給CGI程式。這些資訊可能在由客戶機傳送到伺服器時被中途竊取(如圖2)。注意,
為了保護資訊使其不會
被中途竊取,必須在客戶和伺服器之間進行加密。當然,如果你的客戶機不能識別的話,你不能執行特定CGI的加密。

由於Web處理的特點,使用你專屬的單獨通過CGI程式實現的安全處理協議的唯一途徑是:在表單資訊通過瀏覽器傳送到服務
器之前將其加密。
這個方案如。

之前,發展你自己的安全處理協議幾乎是不可能的。感謝Java這樣的語言,最近在用戶端處理所作的創新,使得這個發展變
成可能。 方法是產生
一個標準HTML格式擴充的Java介面。當Java的提交按鈕被選擇時,Java Applet會在利用標準的POST HTTP請求將它發送到
Web伺服器前先
將值加密。

使用Java作為客戶機來發送和接收加密的資料將允許你使用自己定製的加密方案,而不需要一個昂貴的商務服務器。


因此,在網路上安全保密地傳送資料資訊需要調整瀏覽器和伺服器之間的通訊路徑,有一些是不能僅僅靠CGI就能夠控制
的。目前有兩種加密客
戶機/伺服器資訊處理的建議:SSL(Secure Sockets Layer)和SHTTP(Secure HTTP),分別由Netscape和EIT(Enterprise
Integrations
Technology)提議。關於這點,目前還不清楚哪一個將成為標準;很多公司在他們的伺服器中兩種都採用了。因此,知道如
何在這兩者中編寫
CGI程式是很有用的。

SSL是一個協議獨立的加密方案,在網路資訊包的應用程式層和傳輸層之間提供了安全的通道(參照圖5)。簡單說來,就是HTML
或CGI經過了幕後的
伺服器進行了加密處理,然而對HTML和CGI的作者來說是透明的。

因為用戶端和伺服器端網路程式處理加密過程,幾乎你的所有的CGI指令碼不需要進行安全事務的修正。有一個顯著的例外。
一個nph(no-parse-
header)的CGI程式繞過伺服器而直接與用戶端進行通訊。因此,nph的CGI指令碼不



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。