域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
互聯(lián)網(wǎng)時(shí)代數(shù)據(jù)信息瞬息萬(wàn)變,隨之而來(lái)的是各種網(wǎng)絡(luò)威脅、病毒入侵等各種危害網(wǎng)絡(luò)安全的行為,網(wǎng)絡(luò)安全越來(lái)越受到大家的關(guān)注。華云數(shù)據(jù)本期“智匯華云”專欄將解析Web常見(jiàn)安全漏洞,與大家共同探討數(shù)字時(shí)代的安全問(wèn)題。
SQL注入
1、什么是SQL注入?
SQL注入,就是通過(guò)把SQL命令插入到Web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令。具體來(lái)說(shuō),它是利用現(xiàn)有應(yīng)用程序,將(惡意的)SQL命令注入到后臺(tái)數(shù)據(jù)庫(kù)引擎執(zhí)行的能力,它可以通過(guò)在Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行SQL語(yǔ)句。
2、如何注入?
例子: http://test.com/info?id=1
此URL返回?cái)?shù)據(jù)庫(kù)某表的1條數(shù)據(jù)。程序中可能這么寫的,ID為傳入變量:
select * from user where id=‘”+id+“ ’;
如上,那么查詢語(yǔ)句將是
select * from user where id = ‘1’
如果 id= 1‘ or ’1‘=’1,那么查詢語(yǔ)句將是
select * from user where id = ‘1’ or ‘1’=‘1’
3、SQL注入原因
①對(duì)提交的數(shù)據(jù)未過(guò)濾
②拼裝SQL語(yǔ)句
③不當(dāng)?shù)念愋吞幚?/p>
4、SQL注入防御
(1)字符串長(zhǎng)度驗(yàn)證
僅接受指定長(zhǎng)度范圍內(nèi)的變量值。sql注入腳本必然會(huì)大大增加輸入變量的長(zhǎng)度,通過(guò)長(zhǎng)度限制,比如用戶名長(zhǎng)度為 8 到 20 個(gè)字符之間,超過(guò)就判定為無(wú)效值。
(2)對(duì)單引號(hào)和雙"-"、下劃線、百分號(hào)等sql注釋符號(hào)進(jìn)行轉(zhuǎn)義
(3)不使用動(dòng)態(tài)拼裝SQL,使用參數(shù)化的SQL進(jìn)行數(shù)據(jù)查詢存取
代碼示例:
String sql = "select id, no from user where id=?";
PreparedStatement ps
= conn.prepareStatement(sql);
ps.setInt(1, id);
ps.executeQuery();
(4)框架防御: mybatis
① # 符號(hào)作用為 將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。
如:where user_id= #{id}
如果傳入的值是111,那么解析成sql時(shí)的值為 where id ="111"
如果傳入的值是 1’=or ’1’=‘1’ ,則解析成的sql為 whereid “1’=or ’1’=‘1’ “
②$ 符號(hào)則是將傳入的數(shù)據(jù)直接生成在sql中。
如:where user_id= ‘${id}’
如果傳入的值是111,那么解析成sql時(shí)的值為 where id =‘111’
如果傳入的值是 1’=or ’1’=‘1’,則解析成的sql為 where _id =‘1’or ’1’=1’
結(jié)論:# 符號(hào)能夠防止SQL注入, $符號(hào)無(wú)法防止SQL注入,$ 符號(hào)一般用于傳入數(shù)據(jù)庫(kù)對(duì)象,例如傳入表名
XSS
1、什么是XSS?
往Web頁(yè)面里插入惡意html代碼,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的html代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的
2、XSS分類
(1)持久性的XSS(存儲(chǔ)在服務(wù)器端,攻擊行為將伴隨著攻擊數(shù)據(jù)一直存在)
(2)非持久性的XSS(一次性的,僅對(duì)當(dāng)次的頁(yè)面訪問(wèn)產(chǎn)生影響)
例子:將參數(shù)傳遞至頁(yè)面輸出
參數(shù)寫法: index?value=
頁(yè)面和JS寫法:
| $(‘#xss’).html(value);
3、XSS危害
執(zhí)行任意JS代碼。最常見(jiàn)的做法是獲取COOKIE認(rèn)證信息;其他的就是跳轉(zhuǎn)至惡意網(wǎng)址等,或者配合CSRF漏洞,進(jìn)行創(chuàng)建form表單,進(jìn)行提交,強(qiáng)制使當(dāng)前用戶操作,比如發(fā)帖,刪帖,甚至轉(zhuǎn)賬等。
4、 XSS防護(hù)
(1)過(guò)濾用戶輸入的內(nèi)容,常見(jiàn)的是過(guò)濾 ‘、”、;、< 、>
(2)在用戶提交數(shù)據(jù)時(shí),對(duì)數(shù)據(jù)進(jìn)行編碼處理。
(3)在輸出頁(yè)面時(shí),對(duì)數(shù)據(jù)進(jìn)行編碼處理。
CSRF
1、什么是CSRF?
偽造請(qǐng)求,冒充用戶在站內(nèi)的正常操作
2、CSRF攻擊原理
3、CSRF危害
攻擊者盜用了用戶的身份,可以利用此身份進(jìn)行發(fā)送郵件、發(fā)消息、購(gòu)買商品、銀行轉(zhuǎn)賬等等用戶可執(zhí)行的操作。
4、CSRF如何防護(hù)
(1)驗(yàn)證 HTTP Referer 字段
此方法為基礎(chǔ)防御,目前Referer是可被改寫和偽造的,并非絕對(duì)安全。
(2)HTTP添加自定義參數(shù)驗(yàn)證
服務(wù)器生成token一份存放在session中,一份放在前端隱藏域中隨請(qǐng)求頭部提交。B不訪問(wèn)A網(wǎng)站前端拿不到token,請(qǐng)求無(wú)法通過(guò)驗(yàn)證,達(dá)到防御目的。
URL跳轉(zhuǎn)漏洞
1、什么是URL跳轉(zhuǎn)漏洞?
程序中常會(huì)重定向頁(yè)面,在登錄系統(tǒng)中長(zhǎng)會(huì)根據(jù)URL中的參數(shù)進(jìn)行重定向,便于用戶登錄之后,調(diào)轉(zhuǎn)到之前的頁(yè)面。
2、URL示例
比如: http://www.aa.com/account/login
?from=http://download.aa.com
對(duì)于跳轉(zhuǎn)頁(yè)是否是當(dāng)前站點(diǎn)的頁(yè)面,或者是否是允許的頁(yè)面地址沒(méi)有做判斷,當(dāng)惡意攻擊者將地址改為:
http://www/aa.com/account/login
?from=http://www.bb.com/
那么用戶登錄后會(huì)跳轉(zhuǎn)到www.bb.com,如果是惡意網(wǎng)址,那么用戶就成為受害者。
3、配合session在URL中傳遞的危害
跳轉(zhuǎn)到的頁(yè)面中很容易從HTTP請(qǐng)求頭中獲取到url中session的值,對(duì)于session中驗(yàn)證信息不綁定用戶客戶端信息的情況,攻擊者可直接使用,成為之前用戶的身份。
4、URL跳轉(zhuǎn)漏洞防護(hù)
(1)可以確定的URL:配置對(duì)應(yīng)索引文件,通過(guò)索引找到對(duì)應(yīng)具體url再進(jìn)行跳轉(zhuǎn)
(2)無(wú)法確定的URL:增加規(guī)則校驗(yàn),先通過(guò)驗(yàn)證后在進(jìn)行跳轉(zhuǎn)
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!