017-【CS253】【網(wǎng)絡(luò)安全】【W(wǎng)eb Security】【斯坦福大學(xué)】【中

1. 本周我們將討論有關(guān)服務(wù)器安全的所有內(nèi)容,包括SQL注入、頻繁登錄和攻擊防御等。
2. 有學(xué)生在課程中發(fā)現(xiàn)了安全問(wèn)題并獲得了額外的學(xué)分,這是一種鼓勵(lì)學(xué)生積極參與安全問(wèn)題發(fā)現(xiàn)的方式。
3. CSRF攻擊是一種利用瀏覽器的cookie機(jī)制來(lái)偽造請(qǐng)求的攻擊方式,同站點(diǎn)cookie可以有效防止此類(lèi)攻擊。
4. CSRF令牌是一種防御CSRF攻擊的機(jī)制,服務(wù)器會(huì)生成一個(gè)令牌,并要求客戶(hù)端在后續(xù)的請(qǐng)求中包含該令牌。
5. CSRF令牌可以防止攻擊者偽造請(qǐng)求,因?yàn)楣粽邿o(wú)法獲取受害者網(wǎng)站上的令牌值。
6. CSRF token是一種用于防止跨站請(qǐng)求偽造攻擊的機(jī)制。
7. 服務(wù)器可以使用HMAC函數(shù)來(lái)驗(yàn)證CSRF token的有效性,而無(wú)需記住所有的token。
8. CSRF token和nonce是類(lèi)似的概念,但用于不同的場(chǎng)景。
9. 同站點(diǎn)cookie頭部可以有效地防止CSRF攻擊。
10. Ruby on Rails和Express等框架會(huì)自動(dòng)處理head請(qǐng)求,但開(kāi)發(fā)者需要注意其中的細(xì)節(jié)。
11. 在這個(gè)例子中,開(kāi)發(fā)者在控制器中檢查了request.get,這個(gè)方法返回false,這是一個(gè)意外的結(jié)果,因?yàn)殚_(kāi)發(fā)者只希望這個(gè)控制器運(yùn)行在get請(qǐng)求和post請(qǐng)求上。
12. 這個(gè)問(wèn)題的發(fā)生是因?yàn)殚_(kāi)發(fā)者在同一個(gè)控制器函數(shù)中處理了get和post請(qǐng)求,如果他們使用不同的URL或者不同的控制器函數(shù)來(lái)處理不同的請(qǐng)求,就不會(huì)發(fā)生這個(gè)問(wèn)題。
13. 在Rails中,通過(guò)在代碼運(yùn)行之前檢查CSRF令牌來(lái)驗(yàn)證CSRF令牌的常見(jiàn)做法,但是head請(qǐng)求不會(huì)觸發(fā)這個(gè)檢查,因此會(huì)繞過(guò)CSRF令牌的驗(yàn)證。
14. 通過(guò)發(fā)送一個(gè)head請(qǐng)求,攻擊者可以繞過(guò)CSRF令牌的驗(yàn)證,從而在GitHub上授權(quán)一個(gè)應(yīng)用程序。
15. GitHub已經(jīng)修復(fù)了這個(gè)問(wèn)題,但是開(kāi)發(fā)者可以通過(guò)一些防御性的編碼來(lái)避免類(lèi)似的問(wèn)題,比如使用顯式的檢查和處理不同類(lèi)型的請(qǐng)求。
16. 高級(jí)請(qǐng)求(如head請(qǐng)求)需要進(jìn)行令牌檢查,以確保安全。
17. 令牌檢查可能會(huì)改變請(qǐng)求的語(yǔ)義,需要注意。
18. 代碼應(yīng)該盡量簡(jiǎn)化和明確,避免過(guò)于復(fù)雜和巧妙的設(shè)計(jì)。
19. 應(yīng)該盡早失敗,不要試圖處理不符合預(yù)期的情況。
20. API設(shè)計(jì)應(yīng)該合理,避免默認(rèn)參數(shù)不安全或函數(shù)簽名不明確的情況。
21. 函數(shù)的多態(tài)性:函數(shù)根據(jù)參數(shù)的類(lèi)型來(lái)執(zhí)行不同的操作,可以根據(jù)傳入的數(shù)字執(zhí)行一種操作,傳入字符串執(zhí)行另一種操作,或者傳入額外的參數(shù)執(zhí)行完全不同的操作。
22. jQuery是一個(gè)多態(tài)函數(shù)的例子:根據(jù)傳入的參數(shù)類(lèi)型的不同,jQuery可以執(zhí)行不同的操作,比如傳入CSS選擇器,返回匹配的DOM節(jié)點(diǎn);傳入HTML元素,將其包裝成jQuery對(duì)象;傳入另一個(gè)jQuery對(duì)象,進(jìn)行克隆操作;傳入HTML代碼,創(chuàng)建包含該HTML的DOM節(jié)點(diǎn)。
23. Express中的中間件:中間件是一種通用化的函數(shù),可以在每個(gè)請(qǐng)求之前執(zhí)行,可以用于日志記錄、驗(yàn)證等操作。如果傳入第四個(gè)參數(shù),中間件就變成了錯(cuò)誤處理中間件,用于處理請(qǐng)求處理過(guò)程中的異常。
24. Node.js中的Buffer類(lèi):Buffer類(lèi)用于處理二進(jìn)制數(shù)據(jù),可以通過(guò)傳入不同的參數(shù)類(lèi)型來(lái)創(chuàng)建不同的Buffer對(duì)象。
25. 潛在的安全問(wèn)題:在代碼中存在一種潛在的安全問(wèn)題,當(dāng)將參數(shù)從字符串改為數(shù)字時(shí),可能會(huì)導(dǎo)致服務(wù)器泄露敏感信息。