信息化领域热词分析实现安全性战术
安全性战术有三个方面:抵抗攻击、检测攻击和从攻击中恢复。
抵抗攻击
对用户进行身份验证、对用户进行授权这两个方面暂时未涉及到。
维护数据的机密性是保证用户接收到的数据和发送方发送的数据一致。目前还不知道怎么重构信息化领域热词分析系统来实现这方面的要求。
维护完整性这一方面没怎么搞明白书上到底什么意思。大概是为了保证数据不在传输过程中丢失?这方面实在是不知道该如何重构来实现目标。
限制暴露的信息和限制访问,这两方面我能想到的是sql注入攻击?肯定还有其他攻击的方法,但是目前我只能先解决这一问题。搜索框之前未做过输入检验,只是判断了一下是否为空,若不为空就提交进行搜索。后台的SQL语句是select * from words where lemmaTitle=?,数据表是直接使用的源表,假如Ajax提交的参数是好多退格键和delete from words,这就相当于直接将后台表清空的操作了(按理说,PreparedStatement的executeQuery方法应该只能执行select这种语句,但是搜了搜好像也有执行insert、update、delete成功的案例?)。现在为了抵抗这种攻击,我让后台对取来的数据进行了验证,并且将搜索使用的源表改为了视图。除此之外,还在前台Ajax提交前进行了数据验证。
public static String search(String text) { JSONObject data = new JSONObject(); try { if(text.contains("\b")) { data.put("status", 0); } else { Connection conn = DBUtil.getConnection(); String sql = "select * from search where lemmaTitle=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, text); ResultSet rs = ps.executeQuery(); if(rs.next()) { data.put("status", 1); data.put("lemmaUrl", rs.getString("lemmaUrl")); data.put("lemmaTitle", rs.getString("lemmaTitle")); data.put("synopsis", rs.getString("synopsis")); } DBUtil.close(rs, ps, conn); } } catch (Exception e) { e.printStackTrace(); } return data.toString(); }
检测攻击
这个实在没有头绪,不知道该怎么重构,后来搜了搜,发现这位大佬的一篇博客(https://www.cnblogs.com/xiaoliu66007/p/10243942.html)讲了讲Java Web项目怎么检测攻击。
从攻击中恢复
不知道该怎么重构代码实现这一目标。就这么个小项目,后台数据总共就15840条,提前备个份遭到攻击了就再重新导入一遍呗。