作為初入職場的我們,在學習與工作中,總是會遇到不同的挫折。雖然有些錯誤與某一個具體的行為相關(guān),但有些錯誤卻是所有HTML5開發(fā)人員都需要面對的挑戰(zhàn)。因此,通過研究、體驗和觀察,千鋒武漢HTML5培訓老師總結(jié)了HTML5開發(fā)人員常犯的5個錯誤,以及應(yīng)如何避免這些錯誤,分享給大家。
錯誤一、轉(zhuǎn)件所謂“應(yīng)該能行”的代碼
錯誤:無論是Java,還是在服務(wù)器上運行的代碼,開發(fā)人員都需要測試并確認它是否可以正常工作,而不是在部署了之后,就認為它應(yīng)該就能從一而終地運行。
影響:不經(jīng)過適當錯誤檢查的網(wǎng)站就是對最終用戶耍流氓。不僅會極大地影響用戶體驗,而且其錯誤消息內(nèi)容的類型可能會給黑客線索來滲透這個站點。
如何避免:是人都會犯錯,這個哲理同樣適用于編碼。使用Java,一定要實施好的技術(shù)來防止并抓住錯誤。雖然這篇文章描繪了用Java編碼Windows應(yīng)用程序,但是大部分的內(nèi)容也適用于HTML5開發(fā),許多提示都很不錯!另一種能讓代碼變得可靠又能在未來變化中存活下來的方法是單元測試。
如果我們夠仔細,那么就能捕捉到服務(wù)器端的代碼失敗,而不被用戶發(fā)現(xiàn)。只顯示必要的信息,并且一定要確保設(shè)置友好的錯誤頁面,如HTTP 404s。
錯誤二、寫分叉代碼
錯誤:本著支持所有瀏覽器和版本的崇高理念,開發(fā)人員立志創(chuàng)建可對任意可能情況作出回應(yīng)的代碼。代碼中if語句成堆,所有方向都有分叉。
影響:隨著瀏覽器新版本的更新,代碼文件會變得越來越笨拙和難以管理。
如何避免:實現(xiàn)代碼的功能檢測和瀏覽器/版本檢測。功能檢測技術(shù)不僅可以顯著減少代碼量,還更易于閱讀和管理。不妨考慮使用如Modernizr這樣的庫,不僅有助于功能檢測,還能自動幫助提供不能跟上HTML5和CSS3速度的舊版瀏覽器的反饋支持。
錯誤三、非響應(yīng)式設(shè)計
錯誤:假設(shè)開發(fā)/設(shè)計人員在相同尺寸的顯示器上開發(fā)網(wǎng)站。
影響:當在移動設(shè)備或在非常大的屏幕查看網(wǎng)站時,用戶體驗要么很難看到頁面的重要方面,要么甚至要時刻注意著不導(dǎo)航至其他網(wǎng)頁。
如何避免:響應(yīng)式的思維方式。在網(wǎng)站中使用響應(yīng)式設(shè)計。這里有一些關(guān)于這方面的實用教程,包括響應(yīng)式圖片,還有一個非常受歡迎的庫,那就是Bootstrap。
錯誤四、網(wǎng)站過多刷新
錯誤:創(chuàng)建的網(wǎng)站需要為每一個互動而全面刷新頁面。
影響:類似于頁面臃腫(參見#4),頁面加載時間的性能會受到影響。用戶體驗缺乏流暢性,并且每次互動都可能導(dǎo)致網(wǎng)頁短暫(或長時間)的復(fù)位。
如何避免:快速避免這種情況的一個方法就是,通過測定回發(fā)到服務(wù)器的內(nèi)容是否是真正需要的。例如,當不依賴服務(wù)器端資源的時候,客戶端腳本可用于提供直接結(jié)果。你也可以應(yīng)用AJAX技術(shù)或進一步使用單頁的應(yīng)用程序“SPA”方法。流行的Java庫/框架,如JQuery、KnockoutJS和AngularJS,能讓這些方法的采用變得容易得多。
錯誤五、做了太多的無用功
錯誤:開發(fā)人員花了很長的時間來創(chuàng)建web內(nèi)容。大量的時間花在了重復(fù)的任務(wù)上,或者自己敲代碼寫了很多。
影響:初始網(wǎng)站的發(fā)布和后續(xù)的更新時間過于冗長。如果其他開發(fā)人員也在在做同樣的工作,卻用了更少的時間和精力,那么你的開發(fā)價值顯然就低了。手動勞動很容易出現(xiàn)錯誤,而排除故障錯誤需要更多的時間。
如何避免:探索你的選擇。在開發(fā)的每一個階段考慮使用新的工具和新的流程技術(shù)。例如,你目前使用的代碼編輯器相比SublimeText和Visual Studio,如何?不管你使用的是什么樣的代碼編輯器,你最近有好好鉆研它的功能嗎?也許只投入稍稍一點時間去仔細閱讀文檔,就可以發(fā)現(xiàn)做事的新方法,為今后節(jié)省一個又一個小時的時間。例如,在這篇文章中,擴展Visual Studio可以為web開發(fā)人員提高生產(chǎn)效率。
不要錯過網(wǎng)上可用的幫助工具!例如,檢查在dev.modern.ie上的工具以簡化測試(跨多個平臺和設(shè)備)以及排除故障。
你也可以通過實現(xiàn)流程自動化以減少時間和錯誤。這方面的例子是使用Grunt工具,例如它的自動化功能可以減小文件(見第4點)。另一個例子是Bower,可以協(xié)助管理庫/框架(參見第9點)。至于web服務(wù)器本身?在例如Microsoft Azure Web Apps的幫助下,你可以快速創(chuàng)建一個網(wǎng)站,幾乎所有的開發(fā)場景都可以很輕輕松松地規(guī)模化到你的業(yè)務(wù)中!
最后結(jié)語
通過識別這些常見的錯誤,HTML5開發(fā)人員可以避免很多讓其他人飽受煎熬的挫折。我們不僅需要承認錯誤,還應(yīng)該清楚錯誤的影響,并采取措施避免錯誤,這樣才能有更好的開發(fā)表現(xiàn)——并有信心完成任務(wù)!如果你對HTML5感興趣,就趕快來學吧。
想成為黑客嘛?或者,紅客,駭客,白客?那你會編程吧。
什么?你不會?
沒事,我推薦你幾款游戲,這幾款游戲可以邊玩,邊練習編程
《人力資源機》
《人力資源機》是一款益智解謎類游戲。人力資源機是一款非常有挑戰(zhàn)性的數(shù)學邏輯游戲,在人力資源機中文版游戲中你需要利用數(shù)學的邏輯來進行闖關(guān),幫助你的上司來解決問題,而且這個游戲的難度呈指數(shù)型增長,因為這款游戲吧,基本上是教你:如何編程。
《CodeCombat》
《CodeCombat》是一個HTML5角色扮演游戲(RPG),這款游戲可以教你基本的編程概念在CodeCombat中,你扮演一個英雄,需要通過游戲中不同等級的冒險。第一關(guān)是Kithard Dungeon,里面涵蓋了編程的基本概念。整個冒險過程中你都面臨著編程的挑戰(zhàn),如果通過了,你會解鎖下一關(guān),并獲得經(jīng)驗點,經(jīng)驗點可以用來提升英雄的能力。
《Code Hunt》
《Code Hunt》是一個由Microsoft Research開發(fā)的HTML5科幻主題游戲。
Code Hunt支持Java和C#兩種語言。你可以在游戲中學習到包括算法、循環(huán)和條件表達式等編程概念。你也可以通過閱讀Code Hunt設(shè)計手冊來擴展其他關(guān)卡
《Screeps》
這個游戲是一個開放的策略游戲,在游戲中你控制的單位被稱為creeps ,它可以幫你獲得資源、建立自己的領(lǐng)地等等。作為一個多人在線游戲,這意味著你的creeps會被其他creeps所包圍
《FightCode》
在FightCode中,目的很簡單:就是創(chuàng)建一個能夠擊敗其他玩家機器人的機器人,通過編寫JavaScript代碼。例如,當某個事件發(fā)生時,你可以通過 .rotateCannon()方法來旋轉(zhuǎn)你的大炮。
好了今天就到這,關(guān)注何天,只分享干貨
著WEB應(yīng)用的日益豐富,越來越多的傳統(tǒng)企業(yè)開始使用WEB應(yīng)用來開展在線業(yè)務(wù),與此同時,黑客也將攻擊技術(shù)研究的重點轉(zhuǎn)到了WEB應(yīng)用方面,從而加劇了WEB應(yīng)用的安全風險。
同時有數(shù)據(jù)顯示,有約98%的網(wǎng)站曾經(jīng)遭受黑客攻擊,黑客的襲擊一直是行業(yè)性的問題,從互聯(lián)網(wǎng)發(fā)展至今從未間斷過。
本次將分享基于業(yè)務(wù)安全的Web測試,將分為6個板塊來進行演示介紹。分別為:基于業(yè)務(wù)的安全測試,暴力破解,篡改登錄用戶名信息,截包篡改手機短信/E-mail驗證碼、橫向越權(quán)—查看與修改、刪除、CSRF token。
舉個例子:在一個電商企業(yè)的系統(tǒng)中,假設(shè)現(xiàn)有庫存貨品20個,單價為30元,買家現(xiàn)有資金100元,購1個,那么當前庫存為19個,買家所剩資金為70元。若在代碼編寫階段沒有控制購買數(shù)量只能大于0的話,可能會出現(xiàn)一種情況,客戶可以在購買數(shù)量欄填寫負數(shù),如-3,就會出現(xiàn)剩余數(shù)量為22,客戶剩余資金為160的情況。該漏洞產(chǎn)生的根本原因是沒有控制用戶輸入的購買數(shù)量必須大于0,這就是所謂的基于業(yè)務(wù)安全的漏洞。
在《性能之巔》一書中的闡述了這么一個觀點:知識可以分為已知的已知的知識;已知的未知的知識和未知的未知的知識。我們把已知的未知改為未知的已知。根據(jù)業(yè)務(wù)安全測試可一一對應(yīng):
已知的已知=已知的已經(jīng)出現(xiàn)的BUG,即該BUG已經(jīng)出現(xiàn)過,已有應(yīng)對方法,只需實施修改即可;
未知的已知=未知的已經(jīng)出現(xiàn)的BUG,即已經(jīng)出現(xiàn)在程序的BUG,但還沒有找到,可通過腳本式測試或者探索式測試來應(yīng)對;
未知的未知=未知的沒有驗證的模塊,即未出現(xiàn)的BUG,但有出現(xiàn)的可能性。
通過已知的bug可預(yù)知新的bug的出現(xiàn),可通過探索式測試,找到并在軟件開發(fā)測試之前進行以預(yù)防為主的測試。例如要基于Python的Djiango內(nèi)的Web應(yīng)用框架編寫代碼,那么已經(jīng)可知當訪問數(shù)據(jù)庫時,不要使用傳統(tǒng)的Python訪問數(shù)據(jù)庫的方式,而要采用Djiango自帶的MTV的結(jié)構(gòu)去訪問數(shù)據(jù)庫,就可避免SQL注入的缺陷。
對于TDD概念,是現(xiàn)代軟件開發(fā)中非常重要的概念之一,以測試用例為驅(qū)動的測試方法,要求開發(fā)人員,開發(fā)出符合測試用例的程序,然后通過測試用例對程序進行驗收,這被叫做“測試先行的開發(fā)”。
但并不一定都是自動化測試,可以根據(jù)腳本來進行測試,也可以基于Word或者excel格式的文本化的用例來進行測試,只需要將事先寫好的測試用例供開發(fā)人員參考,可以在開發(fā)階段進行就避免了,這樣爭取做到測試用例中出現(xiàn)的bug不出程序中發(fā)現(xiàn)。
但是如何發(fā)現(xiàn)BUG主要看傳統(tǒng)安全測試與基于安全的測試的區(qū)別,而傳統(tǒng)的安全測試是以預(yù)防為主的,業(yè)務(wù)安全測試是以測試為主的。
暴力破解——Burp suite測試工具。
步驟:
1、設(shè)置internet網(wǎng)絡(luò)代理:在瀏覽器中設(shè)置代理經(jīng)常會遇見一些bug,因此不建議使用瀏覽器設(shè)置。使用控制面板設(shè)置網(wǎng)絡(luò)代理,首先打開控制面板,點擊網(wǎng)絡(luò)和internet,再點擊INTERNET選型,點擊局域網(wǎng)設(shè)置,勾中代理服務(wù)器下的兩個設(shè)置,并設(shè)置地址為127.0.0.1,端口為8888;取消自動配置下的兩個設(shè)置,即可點擊確認,確認后再檢查一遍確認無誤之后代理設(shè)置即完成。
2、啟用Burp suite:安裝Burp suite后,Burp suite需要安裝Java環(huán)境才可以運行 需要先安裝JDK1.8版本,再通過漢化啟動,啟動進入Burp suite。
3、禁用攔截請求:在代理工具下的截斷功能中關(guān)閉攔截請求,變?yōu)閿r截禁用。
4、修改代理監(jiān)控器:在代理工具下的選項功能中改變默認端口,默認端口為8080端口,與tomcat是沖突的,因此把監(jiān)聽端口改為8888,并選擇指定地址。
5、啟動被測程序:打開被測程序,并用瀏覽器進入該程序。
6、進入登錄頁面:通過Command(命令提示符號)窗口,輸入IP config,將IP config中顯示無線局域網(wǎng)適配地址復(fù)制,到登錄頁面上將地址127.0.0.1改為該登錄地址,再次登錄,由于傳輸過程中,使用了SHA256進行傳輸,所以選擇用戶名與密碼時可發(fā)現(xiàn),密碼會變得很長。
7、啟用攔截:成功登錄后就可以開始抓包,將攔截禁用改為攔截請求,啟用后開始攔包。
8、登錄操作:返回登錄頁面輸入用戶名密碼登錄,發(fā)現(xiàn)頁面不變。
9、攔截包:因為包已被Burp suite直接攔截。
10、發(fā)往測試器:將攔截的包發(fā)送至intruder,在測試器中會對默認選項進行標記,成為參數(shù),我們只需要針對用戶名和密碼進行暴力破解,將不需要進行參數(shù)化的選項前的§刪除,由于存在CSRF token,需要把值保持一致,最后剩下兩個參數(shù):用戶名與密碼。
11、設(shè)置攻擊類型:這里選用集束炸彈攻擊,攻擊類型有兩種:音叉攻擊與集束炸彈。音叉攻擊是用戶名與密碼一一對應(yīng)的,需要兩組字典,每組字典中的一行對應(yīng)另一組的對應(yīng)行;集束炸彈是在賬號密碼均未知的情況下,對他們同時進行暴力破解,需要兩組字典,每組字典的賬號,密碼都會去匹配另一組的賬號所有的密碼。
12、載入攻擊字典:再點擊有效負荷,清屏后載入事先設(shè)置好的用戶名和密碼。
13、設(shè)置有效負載處理:密碼傳輸過程中需要進行SHA256加密處理,所以在有效負載處理中選擇合適的Hash算法。
14、開始攻擊:以上步驟設(shè)置完畢,就可以開始攻擊。若破解不成功,在“響應(yīng)”的body里會看到“用戶名或者密碼錯誤”,若破解成功,則響應(yīng)代碼是直接302反向跳轉(zhuǎn)。使用Burp suite進行暴力破解,就這個案例,可參考字節(jié)長度或者狀態(tài)來判斷是否成功,沒有成功破解的是直接返回登錄頁面,因此字節(jié)數(shù)較長,而破解成功的字節(jié)數(shù)不需要跳轉(zhuǎn),因此字節(jié)數(shù)比較短。
暴力破解的注意事項:
1、 不要使用瀏覽器自帶的代理設(shè)置,選擇 “控制面板”中的internet-連接中的設(shè)置。
2、 不用勾選“使用自動配置腳本”。
3、 打開Burp suite,先禁用攔截,配置環(huán)境,環(huán)境配置完畢,再啟用攔截。
4、 如下圖,“起動中”前的√一定要勾上。
5、 截包必須使用真實IP地址,不要使用127.0.0.1或localhost,用Command里面的用IP config。
6、 破解字典是區(qū)分大小寫的。
暴力破解——JMeter測試工具
打開控制面板,啟動程序,用網(wǎng)頁打開測試程序能否使用,確認能使用后,打開JMeter,在登錄界面打開事先準備好的腳本,由于JMeter無法使用集束炸彈,因此使用音叉方法來進行,需要一個用戶名對應(yīng)一個密碼,然后進行發(fā)包。
在登錄驗證界面可查看,登錄驗證字體是綠色的即是破解成功,紅色的則是失敗。找到成功破解的綠色登錄驗證,再通過Debug Sampler找到用戶名與密碼。
注意所有通過Burp suite進行測試的工作均可以通過JMeter實現(xiàn)。
暴力破解看似對白帽黑客并無用處,實際上并非如此,一般程序都是由用戶自行設(shè)置用戶名與密碼的,企業(yè)可以先行對產(chǎn)品進行一次暴力破解,篩選出過于簡單易被破解的密碼,用郵件或者短信的方式通知用戶修改用戶名與密碼,甚至可以設(shè)定強制性修改密碼。若能提供這樣的服務(wù),則能給用戶帶來更好的體驗感,這種情況下,測試可以作為一項增值業(yè)務(wù)。
測試步驟:
1、 設(shè)置internet網(wǎng)絡(luò)代理
2、 啟動Burp suite
3、 進入登錄頁面
4、 輸入用戶名、密碼
5、 攔截請求包
6、 修改cookies用戶名為未注冊用戶
7、 發(fā)送請求包
8、 觀察情況
輸入已注冊過的A的用戶名密碼進行登錄,打開Burp suite,登錄后抓包模塊會被截取,在此輸入登錄信息,會看見A的用戶名與密碼的信息,用戶名是放在username的cookie中的,點擊“行動”選擇發(fā)送到repeater中,在repeater里,可以改cookie-username為已有的另一用戶名B,最終登錄的是A的賬號,而顯示的是B的用戶名。點擊發(fā)送,可進入商品列表,若我們把用戶名改為一個未注冊過的用戶,cookie中顯示的是該新用戶,發(fā)送后仍可進入商品列表。這就是存在的一個缺陷,對于此缺陷,可采用以下方法防御:
從正常的修改密碼流程中使用Burp suite攔截發(fā)送用戶名和手機號請求信息,修改手機號,并再次發(fā)送,然后觀察它的表現(xiàn)。
用手機、短信或者郵件找回密碼的方式都是類似的。在數(shù)據(jù)庫中存有已注冊用戶的用戶名、密碼、郵箱、電話等信息,而且密碼是通過SHA256進行加密的,是一個長字符串。當用戶使用短信驗證輸入用戶名與手機號時,若與數(shù)據(jù)庫中信息一致,則會通過手機發(fā)回驗證碼,重設(shè)密碼;若是在傳輸過程中,手機號碼被截取,收到驗證碼后會在輸入新密碼時提示信息被截取,驗證碼錯誤。
再打開代理,Burp suite啟用攔截,在網(wǎng)頁中再次點擊獲取驗證碼,包就已被Burp suite攔截。點擊“行動”選擇發(fā)送給repeater,在repeater里,改變手機號碼,再發(fā)送請求,在響應(yīng)包中并沒有顯示用戶名與密碼,而是顯示“注冊的用戶名和手機不匹配”請重新輸入。這樣就已經(jīng)成功篡改用戶名與密碼,黑客可將驗證碼發(fā)送至自己手機,在通過這個頁面獲取密碼,輸入驗證碼,而后修改用戶名與密碼,手機、短信或者郵箱都可通過截取傳送的信息進行篡改。
橫向越權(quán)指的是攻擊者嘗試訪問或修改與他擁有相同權(quán)限的用戶的資源。以上述電商網(wǎng)站為例:
查看:當?shù)卿汚用戶的賬號后,我們可以查看該用戶的各類信息,建立訂單,拷貝訂單URL地址,再登錄B用戶賬號,逐一粘貼訂單信息URL地址,查看是否有權(quán)限查看。
修改與刪除:在A用戶登錄后拷貝修改用戶配貨信息地址后,建立訂單,拷貝刪除用戶訂單信息,再登錄B用戶賬號,試圖刪除前面拷貝所得的A用戶的信息。
破解CSRF token
為了防止DDOS攻擊,一個用戶一天只允許輸入用戶名密碼3次,若是超過3次輸入,則存在一個暴力破解的可能性,賬號就會被封掉。黑客應(yīng)對這一情況最常用的方法就是在本地復(fù)制地址,將action改為絕對路徑,再通過Burp suite進行暴力破解,獲取相應(yīng)內(nèi)容。
該方法采用的是通過一個token,在地址里加一個hidden字段,設(shè)置100個隨機長度的字符串,此方法為Djiango的解決方案。
當我們往服務(wù)器或客戶端發(fā)送請求時,帶有一個middle ware hidden的字段,并其名為CSRF token的這么COOKIE的字段,發(fā)送至服務(wù)器后,服務(wù)器自動檢測兩個值是否相等,若相等,則返回Web匹配,否則返回403不匹配。
在這種情況下,可以人為在form表單中加一個hidden字段,但是在cookie中無法加,因此cookie中沒有hidden字段,與100長度的字段不匹配,故而報403錯誤。
比如在JMeter中,可以通過正則表達式獲得參數(shù),將100長度的字符串的token值取代,獲取到token里的字段后,通過建立一個cookie manager,往CSRF token中發(fā)送該字段,同時往csrfmiddleware里發(fā)送COOKIE token的值。這樣兩個值肯定是一樣的,CSRF token被破解。
若使用python中的requests類來寫接口測試,則可以將這100個字符串放在一個變量中,設(shè)在cookie里通過request post 傳輸,同時觸發(fā)body里的username、password和一個hidden字段,此時兩個值是相等的,CSRF token就能被破解。
Web的安全測試是一個很大的題目,在如今web應(yīng)用發(fā)展越來越蓬勃的時刻,隨著手機技術(shù)、html5帶來了許多新的挑戰(zhàn)和機遇,Web安全技術(shù)也應(yīng)該緊跟時勢的發(fā)展,不斷演變地更好。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。