Menu
SpringMVC处理XSS跨站、SQL注入(盲注)攻击的方法分析
       java语言主要用于WEB开发,而WEB项目一般暴露在公网,被入侵和攻击的可能性就会增加,如何优化架构已达到抵御攻击的目的对于WEB项目和WEB开发工程师显得尤为重要,能不能处理安全方面的问题也是衡量一个开发工程师技术能力的重要标准,本文通过RSS,SQL注入的攻击原理开始到springmvc的处理方法分析解决攻击的方法
      一、RSS攻击与SQL注入原理分析

       1、Rss攻击原理介绍

  • XSS攻击介绍:XSS攻击是Web攻击中最常见的攻击方法之一,是通过对网页注入可执行代码(HTML,JAVASCRIPT)且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击
  • 攻击进行的条件:需要向web页面注入恶意代码并且这些恶意代码能够被浏览器成功的执行。
       2、SQL注入原理与介绍
  • 攻击介绍:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
  • SQL注入攻击的典型手段:判断应用程序是否存在注入漏洞;收集信息、并判断数据库类型;根据注入参数类型,重构SQL语句的原貌;猜解表名、字段名;获取账户信息、攻击web或为下一步攻击做准备
       3.SQL盲注原理与介绍
  • SQL盲注介绍: 盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注
      二、解决办法
        解决SQL注入和跨站脚本攻击的基本方法是在用户提交数据的时候对非法字符进行拦截处理
        第一种方法:直接使用jstl的标签即可解决非法字符的问题。在解析从服务器端获取的数据时执行以下escapeHTML()即可。
        附:Javascript方法:
   String.prototype.escapeHTML = function () {
          return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/
    }
        第二种解决方法:通过SPRINGMVC拦截器拦截并过滤危险字符

  注:在使用StringEscapeUtils时需要注意escapeHtml和escapeJavascript方法会把中文字符转换成Unicode编码,如果通过标签或者EL表达式展示时,能够正确还原,但是如果使用类似于Ext这样的前端组件来展示这部分内容时,不能正常还原。
 
  例:
  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绑定,使服务器端接收到数据之后能够自动转移特殊字符,在@Controller中注册@InitBinder
  @InitBinder
  public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringEscapeEditor(false, false, false));
}
以上两种方法各有利弊,第二种方法对特殊字符的处理需要加强和改进