RM新时代足球交易平台

18600329666

咨詢技術(shù)專家

掃一掃
與技術(shù)專家在線溝通

Menu
SpringMVC處理XSS跨站、SQL注入(盲注)攻擊的方法分析
       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í)行。
       2、SQL注入原理與介紹
  • 攻擊介紹: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或為下一步攻擊做準備
       3.SQL盲注原理與介紹
  • 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攔截器攔截并過濾危險字符

  注:在使用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));
}
以上兩種方法各有利弊,第二種方法對特殊字符的處理需要加強和改進

RM新时代足球交易平台