sql注入原理
就是通過(guò)把SQL命令插入到Web表單遞交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
總的來(lái)說(shuō)有以下幾點(diǎn):
1.永遠(yuǎn)不要信任用戶的輸入,要對(duì)用戶的輸入進(jìn)行校驗(yàn),可以通過(guò)正則表達(dá)式,或限制長(zhǎng)度,對(duì)單引號(hào)和雙"-"進(jìn)行轉(zhuǎn)換等。
2.永遠(yuǎn)不要使用動(dòng)態(tài)拼裝SQL,可以使用參數(shù)化的SQL或者直接使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)查詢存取。
3.永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫(kù)連接,為每個(gè)應(yīng)用使用單獨(dú)的權(quán)限有限的數(shù)據(jù)庫(kù)連接。
4.不要把機(jī)密信息明文存放,請(qǐng)加密或者h(yuǎn)ash掉密碼和敏感的信息。
XSS原理及防范
Xss(cross-site scripting)攻擊指的是攻擊者往Web頁(yè)面里插入惡意 html標(biāo)簽或者javascript代碼。比如:攻擊者在論壇中放一個(gè)
看似安全的鏈接,騙取用戶點(diǎn)擊后,竊取cookie中的用戶私密信息;或者攻擊者在論壇中加一個(gè)惡意表單,
當(dāng)用戶提交表單的時(shí)候,卻把信息傳送到攻擊者的服務(wù)器中,而不是用戶原本以為的信任站點(diǎn)。
XSS防范方法
首先代碼里對(duì)用戶輸入的地方和變量都需要仔細(xì)檢查長(zhǎng)度和對(duì)”<”,”>”,”;”,”’”等字符做過(guò)濾;其次任何內(nèi)容寫(xiě)到頁(yè)面之前都必須加以encode,
避免不小心把html tag 弄出來(lái)。這一個(gè)層面做好,至少可以堵住超過(guò)一半的XSS 攻擊。
其次,避免直接在cookie 中泄露用戶隱私,例如email、密碼等等。
再次,通過(guò)使cookie 和系統(tǒng)ip 綁定來(lái)降低cookie 泄露后的危險(xiǎn)。這樣攻擊者得到的cookie 沒(méi)有實(shí)際價(jià)值,不可能拿來(lái)重放。
如果網(wǎng)站不需要再瀏覽器端對(duì)cookie 進(jìn)行操作,可以在Set-Cookie 末尾加上HttpOnly 來(lái)防止javascript 代碼直接獲取cookie 。
最后,盡量采用POST 而非GET 提交表單;
XSS與CSRF有什么區(qū)別嗎?
XSS是獲取信息,不需要提前知道其他用戶頁(yè)面的代碼和數(shù)據(jù)包。CSRF是代替用戶完成指定的動(dòng)作,需要知道其他用戶頁(yè)面的代碼和數(shù)據(jù)包。
要完成一次CSRF攻擊,受害者必須依次完成兩個(gè)步驟:
登錄受信任網(wǎng)站A,并在本地生成Cookie。
在不登出A的情況下,訪問(wèn)危險(xiǎn)網(wǎng)站B。
CSRF的防御
服務(wù)端的CSRF方式方法很多樣,但總的思想都是一致的,就是在客戶端頁(yè)面增加偽隨機(jī)數(shù)。
通過(guò)驗(yàn)證碼的方法
Web Worker 和webSocket
worker主線程:
1.通過(guò) worker = new Worker( url ) 加載一個(gè)JS文件來(lái)創(chuàng)建一個(gè)worker,同時(shí)返回一個(gè)worker實(shí)例。
2.通過(guò)worker.postMessage( data ) 方法來(lái)向worker發(fā)送數(shù)據(jù)。
3.綁定worker.onmessage方法來(lái)接收worker發(fā)送過(guò)來(lái)的數(shù)據(jù)。
4.可以使用 worker.terminate() 來(lái)終止一個(gè)worker的執(zhí)行。
WebSocket是Web應(yīng)用程序的傳輸協(xié)議,它提供了雙向的,按序到達(dá)的數(shù)據(jù)流。他是一個(gè)Html5協(xié)議,WebSocket的連接是持久的,他通過(guò)在客戶端和服務(wù)器之
間保持雙工連接,服務(wù)器的更新可以被及時(shí)推送給客戶端,而不需要客戶端以一定時(shí)間間隔去輪詢。
HTTP和HTTPS
HTTP協(xié)議通常承載于TCP協(xié)議之上,在HTTP和TCP之間添加一個(gè)安全協(xié)議層(SSL或TSL),這個(gè)時(shí)候,就成了我們常說(shuō)的HTTPS。
默認(rèn)HTTP的端口號(hào)為80,HTTPS的端口號(hào)為443。
為什么HTTPS安全
因?yàn)榫W(wǎng)絡(luò)請(qǐng)求需要中間有很多的服務(wù)器路由器的轉(zhuǎn)發(fā)。中間的節(jié)點(diǎn)都可能篡改信息,而如果使用HTTPS,密鑰在你和終點(diǎn)站才有。https之所以比http安全,是因?yàn)樗胹sl/tsl協(xié)議傳輸。它包含證書(shū),卸載,流量轉(zhuǎn)發(fā),負(fù)載均衡,頁(yè)面適配,瀏覽器適配,refer傳遞等。保障了傳輸過(guò)程的安全性。