看好你的门-验证机制被攻击(9)-不严谨的异常处理

来源:互联网 发布:淘宝搜索词查询在哪里 编辑:程序博客网 时间:2024/05/10 09:53

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

  • 1、 简单说明

异常在WEB应用中非常的常见,一般大家都对异常处理非常了解。

下面是我写的一个因为不严谨的异常处理,可能会导致的系统被攻击者利用。主要是利用db.getUser(username,password); 产生异常。
攻击者也许不能获取系统的全部权限,但是有可能获取一些敏感信息。

  • 2、 一个常见的不严谨的异常处理的代码
package com.safe;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang.xwork.StringUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class EasyBugLoginAction extends ActionSupport {    public String execute() throws Exception {        HttpServletRequest request = ServletActionContext.getRequest();        String username = request.getParameter("username");        String password = request.getParameter("password");        request.setAttribute("username", username);        // 用户名和密码如果有一个为空,返回失败        if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {            return "false";        }        try{            User user = db.getUser(username,password); //一个到数据库中查找的方法            if (user == null){                return "false";            }else{                return "sucess";            }        }catch(Exception e){            e.printStackTrace();        }        return "success";    }}

这个逻辑看起来也很正常,对异常进行了处理,对数据是否非空格也进行了检验,看起来一切都很好。 这里使用了一个默认的返回值,默认返回的是 “sucess”。
如果一旦发生了异常,那么就会返回成功。
这段代码虽然不够严谨,但是更加糟糕的代码在实际工作中我也见过。
让这段代码出现异常比较简单,只要在username字段或者password字段,试试200个字符长度看看;如果200不够,那么试试1000个字符看看。

  • 3、 可能被攻击的步骤

提交一个空字符串值;
完全删除name/value 对;
提交非常长和非常短的值;
提交数字替代字符,或者字符替代数字;
……

0 0