学生图书管理靶场

前言:

        最近js结课了,要求写一个学生管理系统,前后端分离的那种,写着写着感觉都快成为了靶场,然后突发奇想,干脆写一个靶场版。有需要的可以联系我领取,可作为结课报告。

        这里是使用tomcat+mysql+servelt实现的,这是一个前后端分离的项目,前端使用到bootstrap框架,jquery库,后端使用的是java实现的接口。

成品展示:

登录界面,在github上找的一个,还是很好看的。

学生图书管理靶场_第1张图片

展示界面,自己手搓。

学生图书管理靶场_第2张图片

还有一个编辑页面。

学生图书管理靶场_第3张图片

由于只要完成增删改查功能,最近又在忙着学习内网知识,就简单的写几个页面。

遇到的难点:

这里主要碰到的问题是前后端数据交互的问题,之前开发的个人博客是前后端不分离的,不需要将后端数据转化为json数据格式,前端传过来的 json数据也不需要转化为对象进行处理。

直接上代码,后端List列表转为JSONObject对象

import java.util.List;

public class ListToJson {
    public List listtoJson(List students){
        List jsonObjects = new ArrayList<>();
        for(Student student :students){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("id",student.getId());
            jsonObject.put("name",student.getName());
            jsonObject.put("studentID",student.getStudentID());
            jsonObject.put("gender",student.getGender());
            jsonObject.put("jspScore",student.getJspScore());
            jsonObject.put("jsScore",student.getJsScore());
            jsonObjects.add(jsonObject);
        }
        return jsonObjects;
    }
}
List jsonObjectList = new ArrayList<>();
jsonObjectList = listToJson.listtoJson(students);
resp.setHeader("Content-Type","application/json;charset=UTF-8");
OutputStream outputStream = resp.getOutputStream();               
outputStream.write(JSON.toJSONString(jsonObjectList).getBytes(StandardCharsets.UTF_8));
outputStream.flush();

这里需要导入fastjson这个依赖,如果有问题可以看看

tomcat报错:java.lang.ClassNotFoundException: com.alibaba.fastjson.JSON_tomcat部署找不到fastjson_学者_小伟的博客-CSDN博客看截图是不是你的错误,我是花了半天的时间给阿里找bug,用第三方库没办法,有句话叫做假如生活强奸了你,不要反抗,趴在下面享受就好了(有点小污)来看看问题所在,报的错误大概意思是,fastjson这个类没有定义,找不到三部曲:1.看看自己的pom.xml里面有没有引入这个第三方依赖很显然我不是这个问题2.看看右边的maven3.很显然我也不是这个问题,我是这么解决的:看以上截图 ,在web-inf里面只有一个文件夹,所以这就是问题所在,没有在这里配置依赖包,...https://blog.csdn.net/qq_44050737/article/details/120120728?ops_request_misc=&request_id=&biz_id=102&utm_term=java.lang.ClassNotFoundExcepti&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-120120728.nonecase&spm=1018.2226.3001.4187学生图书管理靶场_第4张图片

在创建目录中新建一个lib,然后将依赖添加进去,就可以解决,这个问题也是困了我很久很久。

接着就是后端接收前端传过来的JSON数据,然后将其转化为Student对象

import java.nio.charset.StandardCharsets;

public class HttpGetJson {
    /**
     * 获取json数据
     * @param request
     * @return
     */

    public String readJSONData(HttpServletRequest request) throws IOException {
        // 更改为utf-8编码
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
        String len;
        StringBuilder sb = new StringBuilder();
        while ((len = bufferedReader.readLine()) != null) {
            sb.append(len);
        }
        return sb.toString();
    }
}

然后输出一个字符串,然后将字符串进行分割取值,汉字会被URL编码,我们将其解码

String[] fields = json.split("&");
int id = Integer.parseInt(fields[0].substring(fields[0].indexOf("=") + 1))
String namedecode = fields[1].substring(fields[1].indexOf("=") + 1);
String name = URLDecoder.decode(namedecode, "UTF-8");
String studentID = fields[2].substring(fields[2].indexOf("=") + 1);
String genderdecode = fields[3].substring(fields[3].indexOf("=") + 1);
String gender = URLDecoder.decode(genderdecode, "UTF-8");
int jspScore = Integer.parseInt(fields[4].substring(fields[4].indexOf("=") + 1));
int jsScore = Integer.parseInt(fields[5].substring(fields[5].indexOf("=") + 1));
Student student = new Student(id,name,studentID,gender,jspScore,jsScore);
StudentDao studentDao = new StudentDao();
studentDao.changeStudentByID(student);

靶场训练

前台:

学生图书管理靶场_第5张图片

开局一个框,没有验证码,信息搜集一波进行爆破,爆破出密码为hjw123

解决方法:给添加一个验证码,或者将密码改的难点

进入后台后:

学生图书管理靶场_第6张图片

看到这么多框,我们首先尝试一下sql注入、二次注入这些,发现是不存在的,应为我后端进行了预处理,只有搜索框都试试,我们尝试一下xss,将姓名输入

学生图书管理靶场_第7张图片

还是一个存储型xss。

解决方法:将中的

接口调用:

直接访问接口

拿到全部数据,如果对增删改查接口调用,危害就比较大

学生图书管理靶场_第8张图片

解决方法:将接口路径变得复杂点,但还是有可能被找出来,可以将路由写成/admin/SMServlet,又或者每次调用得时候需检查session

暂时就只发现这么多,就三个界面感觉也应该不会有太多的问题了。

如果想要学习更多内容可访问我的个人博客

HJW个人博客http://cn-dragon.cn:8080/

你可能感兴趣的:(靶场开发,html,前端)