服務(wù)近2000家企業(yè),依托一系列實(shí)踐中打磨過的技術(shù)和產(chǎn)品,根據(jù)企業(yè)的具體業(yè)務(wù)問題和需求,針對(duì)性的提供各行業(yè)大數(shù)據(jù)解決方案。
SpringMVC處理XSS跨站、SQL注入(盲注)攻擊的方法分析
來源:未知 時(shí)間:2018-42-27 瀏覽次數(shù):464次
java語言主要用于WEB開發(fā),而WEB項(xiàng)目一般暴露在公網(wǎng),被入侵和攻擊的可能性就會(huì)增加,如何優(yōu)化架構(gòu)已達(dá)到抵御攻擊的目的對(duì)于WEB項(xiàng)目和WEB開發(fā)工程師顯得尤為重要,能不能處理安全方面的問題也是衡量一個(gè)開發(fā)工程師技術(shù)能力的重要標(biāo)準(zhǔn),本文通過RSS,SQL注入的攻擊原理開始到springmvc的處理方法分析解決攻擊的方法一、RSS攻擊與SQL注入原理分析
1、Rss攻擊原理介紹
- XSS攻擊介紹:XSS攻擊是Web攻擊中最常見的攻擊方法之一,是通過對(duì)網(wǎng)頁注入可執(zhí)行代碼(HTML,JAVASCRIPT)且成功地被瀏覽器執(zhí)行,達(dá)到攻擊的目的,形成了一次有效XSS攻擊
- 攻擊進(jìn)行的條件:需要向web頁面注入惡意代碼并且這些惡意代碼能夠被瀏覽器成功的執(zhí)行。
- 攻擊介紹:SQL注入即是指web應(yīng)用程序?qū)τ脩糨斎霐?shù)據(jù)的合法性沒有判斷,攻擊者可以在web應(yīng)用程序中事先定義好的查詢語句的結(jié)尾上添加額外的SQL語句,以此來實(shí)現(xiàn)欺騙數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行非授權(quán)的任意查詢,從而進(jìn)一步得到相應(yīng)的數(shù)據(jù)信息。
- SQL注入攻擊的典型手段:判斷應(yīng)用程序是否存在注入漏洞;收集信息、并判斷數(shù)據(jù)庫(kù)類型;根據(jù)注入?yún)?shù)類型,重構(gòu)SQL語句的原貌;猜解表名、字段名;獲取賬戶信息、攻擊web或?yàn)橄乱徊焦糇鰷?zhǔn)備
- SQL盲注介紹: 盲注就是在sql注入過程中,sql語句執(zhí)行的選擇后,選擇的數(shù)據(jù)不能回顯到前端頁面。此時(shí),我們需要利用一些方法進(jìn)行判斷或者嘗試,這個(gè)過程稱之為盲注
解決SQL注入和跨站腳本攻擊的基本方法是在用戶提交數(shù)據(jù)的時(shí)候?qū)Ψ欠ㄗ址M(jìn)行攔截處理
第一種方法:直接使用jstl的標(biāo)簽即可解決非法字符的問題。在解析從服務(wù)器端獲取的數(shù)據(jù)時(shí)執(zhí)行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/
}
第二種解決方法:通過SPRINGMVC攔截器攔截并過濾危險(xiǎn)字符
第二種解決方法:通過SPRINGMVC攔截器攔截并過濾危險(xiǎn)字符
注:在使用StringEscapeUtils時(shí)需要注意escapeHtml和escapeJavascript方法會(huì)把中文字符轉(zhuǎn)換成Unicode編碼,如果通過標(biāo)簽或者EL表達(dá)式展示時(shí),能夠正確還原,但是如果使用類似于Ext這樣的前端組件來展示這部分內(nèi)容時(shí),不能正常還原。
例:
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {
super();
this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;
}
@Override
public void setAsText(String text) {
if (text == null) {
setValue(null);
} else {
String value = text;
if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); }
if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); }
if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }
}
@Override
public String getAsText() { Object value = getValue(); return value != null ? value.toString() : “”; }
}
下面要將這個(gè)Editor和Spring的Controller綁定,使服務(wù)器端接收到數(shù)據(jù)之后能夠自動(dòng)轉(zhuǎn)移特殊字符,在@Controller中注冊(cè)@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringEscapeEditor(false, false, false));
}
以上兩種方法各有利弊,第二種方法對(duì)特殊字符的處理需要加強(qiáng)和改進(jìn)
以上兩種方法各有利弊,第二種方法對(duì)特殊字符的處理需要加強(qiáng)和改進(jìn)