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

掃一掃