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