国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Web編程防黑,遵循特定的web安全規(guī)范

2019-11-18 12:53:11
字體:
供稿:網(wǎng)友

  web站點(diǎn)不可避免提供了很多同用戶交互的內(nèi)容,在編寫程序過程中,應(yīng)非凡注重用戶輸入內(nèi)容的處理,以及對數(shù)據(jù)庫的一些操作。闡述本文的目的,在于提醒開發(fā)者遵循特定的web編程安全規(guī)范,以盡量避免應(yīng)用程序代碼的安全問題。
  
  對用戶輸入內(nèi)容的處理遵循三步驟的原則:
  1. 檢查輸入數(shù)據(jù)是否來自期望的上一級頁面,具體可采用“同步令牌”等技術(shù)實(shí)現(xiàn);
  2. 檢查輸入的提交方法是否為post方法;
  3. 檢查用戶輸入數(shù)據(jù)是否有效合理;
  通過以上三步驟,即可基本防止別有專心者通過精心構(gòu)造一些字符串來對系統(tǒng)進(jìn)行攻擊。
  
  一、 處理用戶登錄
  用戶登錄程序主要是需要對用戶輸入的用戶名及口令仔細(xì)進(jìn)行有效性校驗(yàn),否則攻擊者可以提交一些非凡數(shù)據(jù),假如程序不能過濾掉這些非凡字符,則可能導(dǎo)致危險(xiǎn)后果。
  
  1. 對于口令驗(yàn)證過程,建議采用下列方式
  <1>根據(jù)提交的用戶名在數(shù)據(jù)庫中查找記錄,假如沒有則出錯返回,假如有該用戶,轉(zhuǎn)步驟<2>;
  <2>將得到的記錄中的口令部分與用戶輸入的口令進(jìn)行字符串比較,假如一致則答應(yīng)通過,否則出錯返回;
  
  注重:不要在一條select語句中同時完成對用戶/口令的驗(yàn)證,以增加潛在的危險(xiǎn)攻擊的難度;
  
  2. 用單引號“封裝”用戶輸入數(shù)據(jù)
  對于php語言寫的代碼,應(yīng)該在所有由用戶輸入的數(shù)據(jù)外面封裝上單引號,不管是數(shù)值型變量還是字符型變量。構(gòu)造sql語句是最好采用下列格式:
  $sql_query=”select f1,f2 from table where id=’input_id’ and name=’input_name’”;
  這樣,用戶輸入數(shù)據(jù)中假如包含單引號等非凡字符,php會自動在其前面增加’/’來取消掉其非凡意義,從而大大降低了安全風(fēng)險(xiǎn)。
  
  同樣,對于j ava語言代碼,在所有可能的情況下,應(yīng)該使用PReparedstatement和動態(tài)sql,即用?符號代表參數(shù),通過preparedstatement的setxxx(如setint, setstring等)方法設(shè)置參數(shù),然后執(zhí)行sql語句,不要養(yǎng)成在每次語句執(zhí)行前根據(jù)參數(shù)拼sql語句的習(xí)慣。
  
  二、 處理用戶輸入
  除了對登錄的處理,在處理用戶輸入時,還需遵循以下原則:
  
  1. 拒絕任何以斜線開始的內(nèi)容
  斜線意味著“相對于根”或絕對路徑。用戶很少需要訪問web根目錄之外的數(shù)據(jù),這樣他們使用的路徑就是相對于web根目錄,而不是絕對路徑,為安全起見,有必要拒絕任何以斜線開始的內(nèi)容;
  
  2. 拒絕任何包含單個點(diǎn)(.)和兩個點(diǎn)(..)的序列的內(nèi)容
  在路徑中單個點(diǎn)(.)和兩個點(diǎn)(..)的序列有非凡含義。單點(diǎn)意味著“相對于當(dāng)前目錄”,而雙點(diǎn)意味著“相對于當(dāng)前目錄的父目錄”。有些人可以建立象../../../etc/passwd這樣的串逆向三層,然后向下進(jìn)入/etc/passwd文件,從而對系統(tǒng)安全造成極大威脅;
  
  3. 在把用戶提交的數(shù)據(jù)傳送給系統(tǒng)之前,過濾掉如下字符:
  ; < > * & ! # ( ) { } [ ] : ‘ “ /
  此外,還要注重對回車換行符號做過濾處理;
  
  4. 拒絕任何以冒號為第二個字符的內(nèi)容
  基于nt服務(wù)器使用驅(qū)動器字母的概念來引用磁盤卷,包含對驅(qū)動器的引用的路徑都以一個字母加上一個冒號開頭;
  
  5. 應(yīng)拒絕任何unc路徑
  基于nt的服務(wù)器還支持universal naming conventions(unc)引用,一個unc文件規(guī)格指定機(jī)器名和一個共享點(diǎn),其余部分和指定機(jī)器上的指定共享點(diǎn)有關(guān)。unc文件規(guī)格總是以兩個反斜線開頭,編寫程序時應(yīng)加以注重。
  
  6. 仔細(xì)檢查輸入語句,一遍情況拒絕如下命令:
  rm –f
  mail ……
  delete ……
  …… /etc/passwd
  或其它對系統(tǒng)有威脅的操作。
  7. 存儲/刪除密碼
  假如密碼是存儲在 j ava string 對象中的,則直到對它進(jìn)行垃圾收集或進(jìn)程終止之前,密碼會一直駐留在內(nèi)存中。即使進(jìn)行了垃圾收集,它仍會存在于空閑內(nèi)存堆中,直到重用該內(nèi)存空間為止。密碼 string 在內(nèi)存中駐留得越久,遭到竊聽的危險(xiǎn)性就越大。
  
  更糟的是,假如實(shí)際內(nèi)存減少,則操作系統(tǒng)會將這個密碼 string 換頁調(diào)度到磁盤的交換空間,因此輕易遭受磁盤塊竊聽攻擊。
  
  為了將這種泄密的可能性降至最低(但不是消除),您應(yīng)該將密碼存儲在 char 數(shù)組中,并在使用后對其置零。(string 是不可變的,所以無法對其置零。)
  
  8. j ava編程的智能序列化
  當(dāng)為存儲器或傳輸任何私有字段而序列化對象時,缺省情況下,這些對象都呈現(xiàn)在流中。因此,敏感數(shù)據(jù)很輕易被竊聽。可以使用 transient 要害字來標(biāo)記屬性,這樣在流中將忽略該屬性。
  
  三、 處理數(shù)值型變量
  所有用戶輸入有關(guān)變量都要用單引號包起來(php語言)。
  對所有數(shù)值型變量,首先要判定其內(nèi)容是不是真的數(shù)值型(例如可以用is_num()函數(shù)),假如不是,就進(jìn)行出錯處理。為了安全起見,即使是數(shù)值型變量,也應(yīng)當(dāng)在它的外面包上單引號。
  
  四、 處理出錯信息
  程序員寫程序時,往往設(shè)定輸出一些出錯信息,或者借助系統(tǒng)的出錯信息對程序進(jìn)行調(diào)試。在實(shí)際應(yīng)用中,一定要注重替換這些出錯提示信息,以免泄露一些重要的信息給惡意攻擊者。非凡時在程序測試階段,一定要注重用戶輸入錯誤數(shù)據(jù)后程序的運(yùn)行結(jié)果及報(bào)錯信息等。
  
  五、 危險(xiǎn)的系統(tǒng)調(diào)用
  盡量減少system()、popen()之類的系統(tǒng)調(diào)用,非凡是這些調(diào)用假如要激活一個系統(tǒng)shell時,更應(yīng)該仔細(xì)檢查其安全性,以免被黑客利用。
  假如不是非凡需要,不要使用system()或者popen()這樣的系統(tǒng)調(diào)用,非凡是以用戶輸入的數(shù)據(jù)作為這些調(diào)用的參數(shù)的時候。假如沒有對用戶輸入數(shù)據(jù)進(jìn)行分析處理,可能會被用來執(zhí)行系統(tǒng)命令。假如必須使用這些調(diào)用,應(yīng)當(dāng)過濾掉用戶輸入數(shù)據(jù)中存在的危險(xiǎn)字符: ; & < >等等。
  或者,可以通過一個或多個參數(shù),在不激活一個shell的前提下執(zhí)行一些命令,達(dá)到程序要完成的目的,如用perl寫的如下代碼是安全的:
  system(‘/usr/games/fortune’,’-o’);
  
  也可以用open達(dá)到和POPOn相視的效果,但不用激活shell:
  open(fh,’-’)exec(“program”,$arg1,$arg2);
  
  或者用下面的代碼不接受不安全的數(shù)據(jù)信息,避免被攻擊:
  unless($recipient=/^[/w@/./-]+$/)
  {
  #print out some Html here indicating failure
  exit(1);
  }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵寿县| 子洲县| 新乐市| 佛山市| 商丘市| 康保县| 丘北县| 南丹县| 阳山县| 湾仔区| 东海县| 江达县| 察哈| 长兴县| 惠水县| 洛扎县| 格尔木市| 桂阳县| 平乐县| 安多县| 保靖县| 法库县| 安平县| 申扎县| 门头沟区| 宝山区| 大关县| 公安县| 玛多县| 正镶白旗| 扶风县| 巢湖市| 宜都市| 日土县| 福安市| 赣州市| 崇信县| 长春市| 新安县| 屏南县| 日照市|